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

初始化为父java后调用子类方法

初始化为父java后调用子类方法

holdtom 2022-12-15 14:46:47
这可能(肯定会)听起来很愚蠢,但我被困住了,我找不到解决问题的合适方法。我有一个超类和两个子类扩展它。在基于条件的父类上,我想从两个类中的任何一个调用该方法。这是在一个循环中,所以我决定不做同样的检查,而是做一次检查,从超类创建一个对象,然后将该对象更改为两个子类之一。IEpublic class Parent{    public void method() {        Parent object=new Parent();        if(a==b) {            object=new Child_A();        }else {            object=new Child_B();        }        for() {            object.method();        }    }    public void method() {        //empty method. need it just to compile    }}public class Child_A extends Parent{    public void method() {        //do something useful    }}public class Child_A extends Parent{    public void method() {          //do something useful    }}我必须编写 Parent.method(),因为否则编译会抱怨 Parent 类上没有 method() 方法。因此,调用的方法不是孩子之一,而是父母方法。我读过需要将对象直接分配给类,例如Childen_A object=new Childen_A. 问题是我想对两种情况 ( object.method()) 使用相同的命令,无论它指的是哪个类。奇怪的是,在调试期间,我看到该对象的类型为 Child_A,但调用了 super 方法。我知道解决方案是创建两个不同的对象,每个子类一个,但这会使我的代码更难看,我将不得不在循环中使用 if 语句。所以正确的方法必须是public void method() {   for() {       if(a=b) {            Child_A object=new Child_A();            object.method();       }else {            Child_B() object=new Child_B();            object.method();        }    }}有没有办法避免循环内的 if 语句?谢谢
查看完整描述

1 回答

?
幕布斯6054654

TA贡献1876条经验 获得超7个赞

你的代码应该是


public class Parent {


    public void method() {


    }


    // OR


    public abstract void method(); // and make the class abstract as well

}


public class Child_A extends Parent {


    @Override

    public void method() {

        //do something useful

    }

}


// same with Child_B


查看完整回答
反对 回复 2022-12-15
  • 1 回答
  • 0 关注
  • 116 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号