這可能(肯定會)聽起來很愚蠢,但我被困住了,我找不到解決問題的合適方法。我有一個超類和兩個子類擴展它。在基于條件的父類上,我想從兩個類中的任何一個調用該方法。這是在一個循環中,所以我決定不做同樣的檢查,而是做一次檢查,從超類創建一個對象,然后將該對象更改為兩個子類之一。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
提交
取消