初始化为父Java

时间:2019-05-24 13:17:32

标签: java

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

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(),否则cos会抱怨在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 个答案:

答案 0 :(得分:1)

您的代码应为

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