作者:
DisdainU (莖莖濡吮汁)
2016-10-08 20:54:33class Derived extends PrivateOverride{}
public class PrivateOverride{
private void f(){
System.out.println("private f()");
}
public static void main(String[] args){
PrivateOverride p=new Derived();
p.f();
}
}
/* output:
private f()
*/
想問的是 既然base class的f()是private
也就代表在Derived中看不到f()
那為什麼例子中卻可以執行出結果?
手機排版 請見諒
作者:
ssccg (23)
2016-10-08 21:14:00看不到不等於不存在,Derived也是一個PrivateOverride當然也有f,從看的到f的地方呼叫(PrivateOverride的main)當然有
作者:
pttworld (批踢踢世界)
2016-10-08 21:21:00polymorphism and visibility, specification幫忙你。
因為建立 Derived 實體時也會建立 PrivateOverride實體
我覺得這是實作與規格書岐義的點, 理論上不被繼承事實是繼承的, 但是有繼承卻不能夠修改。網路有很多討論吧, 大家對這部分也各有各的觀點。
作者:
ssccg (23)
2016-10-09 02:56:00我覺得邏輯上和實作上都是當然會被繼承的如果文件寫private"不被繼承"那是用字問題private internal protected friend這些都只是存取限制