使用子对象数组时,如何调用抽象类的子类方法?

时间:2019-03-16 19:36:46

标签: java

我有一个抽象类(父类)及其子类。

主要,我创建了一个数组。看起来像这样:

AbstractClass[] array = {childClassObj1, childClassObj2};
printInfo(array);

public static void printInfo (AbstractClass[] array){
System.out.printf("%s", childClassObj1.getInfo());
}

“ childClassObj1.getInfo()”中发生编译器错误。如果将其更改为“ array [0] .getInfo()”,则将无法完成,因为方法getInfo()在子类中,而不在抽象类中。如何调用抽象类的子类方法?

1 个答案:

答案 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数组。