java - Java中如何通过抽象类访问子类?

标签 java xml abstract-class

我有以下 Java 代码:

class Info {
    @XmlAnyElement
    @XmlElementRefs({@XmlElementRef(name="apple", type="Apple.class")})
    final private List<Fruit> fruits = new ArrayList<Fruit>();  

    public Info() {
    }

    public List<Fruit> getFruits() {
        return fruits;
    }
}

public abstract class Fruit {
    @XmlElement(name = "label", required = true)
    @XmlJavaTypeAdapter(NormalizedStringAdapter.class)
    String name = null;

    public Fruit() {
    }
}

@XmlRootElement(name="apple")
public class Apple extends Fruit {
    @XmlElement(name = "age", required = true)  
    int age;

    public int getAge() {
        return age;
    }
}

<config>
  <Info>
    <apple>
      <age>20</age>
    </apple>
  </Info>
</config>

那么在主类中,如何访问类Apple来获取苹果的年龄?

class Main() {
    private List<Fruit> fruits = new ArrayList<Fruit>();

    public void getAge() {
        Info info = new Info();
        fruits = info.getFruits();
    }
}

在主类中,我们得到了一个水果列表,但是如何访问Apple类的getAge()方法呢?

最佳答案

首先,请注意,您无法确定您的 Fruit对象是 Apple 的实例,你的 fruits对象不是一个单一的Fruit但是一个List<Fruit> .

也就是说,假设您想要 getAge返回第一个的年龄Apple在列表中,您可以执行以下操作:

public void getAge() {
    int age = -1;
    for(Fruit f : fruits) {
        if(f instanceof Apple) {
            age = ((Apple)f).getAge();
        }
    }
}

关于java - Java中如何通过抽象类访问子类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21732272/

相关文章:

python - 在 LaTeX 中将 HTML img 标签转换为带有标题的图形

java - 如何在abstractDAO中使用特定的rowmapper

java - "Destroying connection that could not be successfully matched"

android - 在 Android 应用程序中集成 Admob 时获取 RuntimeException

java - JiBX:如何在我的代码中继续使用接口(interface)?

swift - Swift 中的抽象方法?

java - 抽象类错误

java - 由服务器发起的 TCP 连接关闭是否有利?

本地主机 Java 客户端错误 : MasterNotDiscoveredException[waited for [30s]] 上的 Elasticsearch 2.1.1

java - 无法将方面应用于 String 类