簡體   English   中英

確定用於在子類中調用方法的超類引用

[英]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() 因此,執行不同的邏輯。

老實說,我覺得這只是一個錯誤的問題。 我不明白為什么以及如何做到這一點。 從接口的角度來看,它有一個符合功能簽名標准的實現,這一切都很重要。 如果IntAIntB期望得到不同的結果,那么它們應該在兩個不同的類中實現。

我曾兩次遇到這種情況,因此我問的原因。 真的有辦法確定嗎? 有沒有辦法在其他語言如C/C++做到這一點?

你不僅不能真的這樣做(除了一些復雜的巫術),但正如你所說,沒有充分的理由甚至嘗試這樣做。

唯一可能出現這種情況的情況是,如果您意外地將相同的方法簽名提供給常用的2個接口,並且可能最終在同一個類中一起實現,但具有不同的功能。 但這是接口部分的設計錯誤。

周圍沒有干凈的方式,即使是一種不潔凈的方式也會如此復雜,以至於沒有一個心智正常的人會嘗試它。 正確的做法是重構其中一個接口以使用不同的方法簽名。 如果這種情況已經出現兩次,這也可能是更大設計問題的跡象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM