繁体   English   中英

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

[英]How do I call abstract class' child class method when using an array of child objects?

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

总的来说,我创建了一个数组。 看起来像这样:

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

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

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

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的功能,则可以轻松地使用ChildClass数组。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM