这可能(肯定会)听起来很愚蠢,但我被困住了,我找不到解决问题的合适方法。我有一个超类和两个子类扩展它。在基于条件的父类上,我想从两个类中的任何一个调用该方法。这是在一个循环中,所以我决定不做同样的检查,而是做一次检查,从超类创建一个对象,然后将该对象更改为两个子类之一。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
添加回答
举报
0/150
提交
取消
