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