如何在Java中通过abstruct类访问子类?
我有以下Java代码:如何在Java中通过abstruct类访问子类?,java,xml,abstract-class,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>
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类的
getAge()
方法呢?首先,请注意,您不能确定您的fruit
对象是Apple
的一个实例,并且您的fruits
对象不是一个fruit
而是一个列表
也就是说,假设您希望getAge
返回列表中第一个Apple
的年龄,您可以执行以下操作:
public void getAge() {
int age = -1;
for(Fruit f : fruits) {
if(f instanceof Apple) {
age = ((Apple)f).getAge();
}
}
}
您可以将抽象方法添加到类中:
public abstract class Fruit {
@XmlElement(name = "label", required = true)
@XmlJavaTypeAdapter(NormalizedStringAdapter.class)
String name = null;
public abstract int getAge();
public Fruit() {
}
}
将其投射到Apple,然后调用getAge
?在这之前(应用投射),测试您正在处理的实例是否确实是一个Apple?如果您需要所有水果子类的age。没错!但如果父类中没有此方法,则没有从子类“访问”该方法的通用方法。
public abstract class Fruit {
@XmlElement(name = "label", required = true)
@XmlJavaTypeAdapter(NormalizedStringAdapter.class)
String name = null;
public abstract int getAge();
public Fruit() {
}
}