簡體   English   中英

Java隱藏:客戶端類可以通過什么方式調用`super`?

[英]Java Hiding: Any Way for Client Classes to Call `super`?

除了在子類上顯式添加一個方法來調用一個super方法之外,還是要暫時“取消隱藏”它嗎? 我想在Test2實例上調用super.blah()方法。 我必須使用像originalBlah這樣的方法,還是有另一種方式?

public class TestingHiding {
    public static void main(String[] args) {
        Test1 b = new Test2();
        b.blah();
    }
}

class Test2 extends Test1 {
    public void blah() {
        System.out.println("test2 says blah");
    }

    public void originalBlah() {
        super.blah();
    }
}

class Test1 {
    public void blah() {
        System.out.println("test1 says blah");
    }

}

編輯:很抱歉在游戲后期添加問題,但我有一個內存閃存(我認為):在C#中這是不同的? 這取決於你think你擁有哪個班級(Test1或Test2)?

不,沒有辦法像這樣顛覆繼承的概念。

據我所知,你想做一些像Test1 b = new Test2(); b.super.blah() Test1 b = new Test2(); b.super.blah() 這是不可能的,super嚴格限於從子類內部調用到超類。

當你需要這樣的東西時很難想象情況。

您可以禁止方法覆蓋。
您還可以考慮模板方法模式技術。

簡單的答案是:你做不到

你可能會有

class Test2 extends Test1 {
    public void blah() {
        if("condition"){
            super.blah()
        }
        System.out.println("test2 says blah");
    }

}

或者采用原始的方式,或者完全解除blah實現,以便能夠調用您需要的任何實現,但這就是它。

暫無
暫無

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

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