Re: [問題] protected

看板java作者 (痞子軍團團長)時間11年前 (2013/12/26 10:51), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《broodstare (交給C4就對了)》之銘言: : (已爬文 && google) : 各位前輩好, : 在 "The Java Tutorial Object-Oriented Programming for the Internet" : 這本書內提到有關protected內容: : 「protected 若類別的建構元被宣告為protected, 則只有身為此類別的後代 : (子類別)才能夠進行物件的建立」 中文名詞翻譯看起來真痛苦 Orz : 我就試著去寫個程式如下: : class Beta{ : protected Beta(){ : ; : } : } : public class Add{ : public static void main(String[] args){ : Beta beta2 = new Beta(); : } : } : 這樣卻可以建立一個新的Beta物件? 我理解書上的那段話是: 必須是先建立一個class : 去繼承Beta這個class後(好比: class Gamma extends Beta),才可以建立物件 : 想請問版上的前輩是我哪裡搞錯了? 謝謝 一言以蔽之:「subclass 包含宣告成該 class 的 object」 (update:棍,搞笑了,上面這句話是 method 才適用 constructor 不適用... 不然下面就自打臉了 XDXD) 我忘記當初這句話哪裡抄來的,JLS 裡頭應該有 [逃] 請不要忘記這些 modifier 都還跟 package 扯上一點關係 例如 protected 跟 public(無權限可言 XD)相比,就是 不同 package、不是 subclass 不能存取 所以,必須要下面這個 case 才會如你所願地炸掉 // 檔案位置: /foo/Foo.java package foo; public class Foo { protected Foo() {} } // 檔案位置: /Main.java public class Main { public static void main(String[] args) { Foo foo = new Foo(); } } 無論是你把 Foo.java 挪到 classpath 的根目錄 還是你把 Main.java 挪到 /foo 底下,都不會有事情 至於 class 的 public 還是 package(可省略) 就是另外一個故事了 [毆飛] -- 錢鍾書: 說出來的話 http://www.psmonkey.org 比不上不說出來的話 Java 版 cookcomic 版 只影射著說不出來的話 and more...... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.115.236.199 修正耍白痴的部份 [遮臉] ※ 編輯: PsMonkey 來自: 59.115.236.199 (12/26 10:53)

12/26 11:07, , 1F
謝謝QQQQQQQQ 立馬來研究!!!!! 真的很感謝!!!
12/26 11:07, 1F
文章代碼(AID): #1IkvcmH9 (java)
討論串 (同標題文章)
本文引述了以下文章的的內容:
1
4
完整討論串 (本文為第 2 之 2 篇):
1
1
1
4
文章代碼(AID): #1IkvcmH9 (java)