[問題] 關於向上轉型

作者: DisdainU (莖莖濡吮汁)   2016-10-08 20:54:33
class 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()
那為什麼例子中卻可以執行出結果?
手機排版 請見諒
作者: v9290026 (CH)   2016-10-08 20:57:00
多型概念阿
作者: ssccg (23)   2016-10-08 21:14:00
看不到不等於不存在,Derived也是一個PrivateOverride當然也有f,從看的到f的地方呼叫(PrivateOverride的main)當然有
作者: pttworld (批踢踢世界)   2016-10-08 21:21:00
polymorphism and visibility, specification幫忙你。
作者: jackblack   2016-10-08 23:28:00
因為建立 Derived 實體時也會建立 PrivateOverride實體
作者: ripple0129 (perry tsai)   2016-10-09 00:44:00
我覺得這是實作與規格書岐義的點, 理論上不被繼承事實是繼承的, 但是有繼承卻不能夠修改。網路有很多討論吧, 大家對這部分也各有各的觀點。
作者: ssccg (23)   2016-10-09 02:56:00
我覺得邏輯上和實作上都是當然會被繼承的如果文件寫private"不被繼承"那是用字問題private internal protected friend這些都只是存取限制

Links booklink

Contact Us: admin [ a t ] ucptt.com