我有以下 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/