[問題] 關於向上轉型

看板java作者 (莖莖濡吮汁)時間7年前 (2016/10/08 20:54), 編輯推噓3(309)
留言12則, 5人參與, 最新討論串1/2 (看更多)
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

10/08 20:57, , 1F
多型概念阿
10/08 20:57, 1F

10/08 21:14, , 2F
看不到不等於不存在,Derived也是一個PrivateOverride當然
10/08 21:14, 2F

10/08 21:14, , 3F
也有f,從看的到f的地方呼叫(PrivateOverride的main)當然有
10/08 21:14, 3F

10/08 21:21, , 4F
polymorphism and visibility, specification幫忙你。
10/08 21:21, 4F

10/08 23:28, , 5F
因為建立 Derived 實體時也會建立 PrivateOverride
10/08 23:28, 5F

10/08 23:28, , 6F
實體
10/08 23:28, 6F

10/09 00:44, , 7F
我覺得這是實作與規格書岐義的點, 理論上不被繼承事
10/09 00:44, 7F

10/09 00:44, , 8F
實是繼承的, 但是有繼承卻不能夠修改。網路有很多討
10/09 00:44, 8F

10/09 00:44, , 9F
論吧, 大家對這部分也各有各的觀點。
10/09 00:44, 9F

10/09 02:56, , 10F
我覺得邏輯上和實作上都是當然會被繼承的
10/09 02:56, 10F

10/09 02:59, , 11F
如果文件寫private"不被繼承"那是用字問題
10/09 02:59, 11F

10/09 03:00, , 12F
private internal protected friend這些都只是存取限制
10/09 03:00, 12F
文章代碼(AID): #1N-EoCHT (java)
文章代碼(AID): #1N-EoCHT (java)