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

这可能(肯定会)听起来很愚蠢,但我被困住了,我找不到解决问题的合适方法。我有一个超类和两个子类扩展它。在基于条件的父类上,我想从两个类中的任何一个调用该方法。这是在一个循环中,所以我决定不做同样的检查,而是做一次检查,从超类创建一个对象,然后将该对象更改为两个子类之一。IE


public 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 语句?谢谢


holdtom
浏览 117回答 1
1回答

幕布斯6054654

你的代码应该是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
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java