看板 java 關於我們 聯絡資訊
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() 那為什麼例子中卻可以執行出結果? 手機排版 請見諒 ----- Sent from JPTT on my Sony D6653. -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 115.82.32.154 ※ 文章網址: https://www.ptt.cc/bbs/java/M.1475931276.A.45D.html
v9290026: 多型概念阿 10/08 20:57
ssccg: 看不到不等於不存在,Derived也是一個PrivateOverride當然 10/08 21:14
ssccg: 也有f,從看的到f的地方呼叫(PrivateOverride的main)當然有 10/08 21:14
pttworld: polymorphism and visibility, specification幫忙你。 10/08 21:21
jackblack: 因為建立 Derived 實體時也會建立 PrivateOverride 10/08 23:28
jackblack: 實體 10/08 23:28
ripple0129: 我覺得這是實作與規格書岐義的點, 理論上不被繼承事 10/09 00:44
ripple0129: 實是繼承的, 但是有繼承卻不能夠修改。網路有很多討 10/09 00:44
ripple0129: 論吧, 大家對這部分也各有各的觀點。 10/09 00:44
ssccg: 我覺得邏輯上和實作上都是當然會被繼承的 10/09 02:56
ssccg: 如果文件寫private"不被繼承"那是用字問題 10/09 02:59
ssccg: private internal protected friend這些都只是存取限制 10/09 03:00