为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

www说 2022-08-17 10:56:19
我有一个抽象类(父类)及其子类。总的来说,我创建了一个数组。它看起来像这样: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 回答

?
慕哥9229398

TA贡献1877条经验 获得超6个赞

将方法添加到父类。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


查看完整回答
反对 回复 2022-08-17
  • 1 回答
  • 0 关注
  • 94 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信