我有一个抽象类(父类)及其子类。
主要,我创建了一个数组。看起来像这样:
AbstractClass[] array = {childClassObj1, childClassObj2};
printInfo(array);
public static void printInfo (AbstractClass[] array){
System.out.printf("%s", childClassObj1.getInfo());
}
“ childClassObj1.getInfo()”中发生编译器错误。如果将其更改为“ array [0] .getInfo()”,则将无法完成,因为方法getInfo()在子类中,而不在抽象类中。如何调用抽象类的子类方法?
答案 0 :(得分:0)
向您的父类添加abstract
方法getInfo()
。
public abstract class AbstractClass {
public abstract String getInfo();
}
然后,在您的子类中覆盖此方法:
public class ChildClass extends AbstractClass {
@Override
public String getInfo() {
return "Info string";
}
}
然后,遍历数组并在每个实例上调用该方法:
public static void printInfo (AbstractClass[] array){
for(AbstractClass child : array) {
System.out.printf("%s%n", child.getInfo());
}
}
编辑: 如果您无法将方法添加到抽象类中,则需要将循环中的每个元素强制转换为子类的类型:
public static void printInfo (AbstractClass[] array){
for(AbstractClass child : array) {
System.out.printf("%s%n", ((ChildClass)child).getInfo());
}
}
但是要小心。仅当您确定数组中只有ChildClass
的实例时,这才起作用。如果存在另一个子类的实例,您将获得一个ClassCastException
。
这样做还违反了创建抽象类的目的,因为如果您只需要那里的功能,则可以轻松地使用ChildClass
数组。