[英]Determine the super class reference used to call method in subclass
我已被問過這幾次了,我完全不知道如何以及為什么會這樣做。
這是場景:
interface IntA {
void someMethod();
}
interface IntB {
void someMethod();
}
兩個簡單的接口; 在下面以簡單的類實現
class ClassAB implements IntA,IntB {
@Override
public void someMethod(){
//some logic
}
}
然后我們可以這樣實例化和使用:
IntA a = new ClassAB();
a.someMethod();
或通過其他界面:
IntB b = new ClassAB();
b.someMethod();
現在的問題是在someMethod()
的實現中,我可以找出他們是否使用IntA
引用或IntB
引用來調用someMethod()
。 因此,執行不同的邏輯。
老實說,我覺得這只是一個錯誤的問題。 我不明白為什么以及如何做到這一點。 從接口的角度來看,它有一個符合功能簽名標准的實現,這一切都很重要。 如果IntA
和IntB
期望得到不同的結果,那么它們應該在兩個不同的類中實現。
我曾兩次遇到這種情況,因此我問的原因。 真的有辦法確定嗎? 有沒有辦法在其他語言如C/C++
做到這一點?
你不僅不能真的這樣做(除了一些復雜的巫術),但正如你所說,沒有充分的理由甚至嘗試這樣做。
唯一可能出現這種情況的情況是,如果您意外地將相同的方法簽名提供給常用的2個接口,並且可能最終在同一個類中一起實現,但具有不同的功能。 但這是接口部分的設計錯誤。
周圍沒有干凈的方式,即使是一種不潔凈的方式也會如此復雜,以至於沒有一個心智正常的人會嘗試它。 正確的做法是重構其中一個接口以使用不同的方法簽名。 如果這種情況已經出現兩次,這也可能是更大設計問題的跡象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.