[英]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.