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

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


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


AbstractClass[] array = {childClassObj1, childClassObj2};

printInfo(array);


public static void printInfo (AbstractClass[] array){

System.out.printf("%s", childClassObj1.getInfo());

}

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


www说
浏览 146回答 1
1回答

慕哥9229398

将方法添加到父类。abstractgetInfo()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());    }}但要小心。这仅在您确定数组中只有 的实例时才有效。如果存在另一个子类的实例,您将获得 .ChildClassClassCastException这样做也违背了拥有抽象类的目的,因为如果你只需要从那里的功能,你可以很容易地使用数组。ChildClass
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java