Re: [問題] protected
※ 引述《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
12/26 11:07, 1F
討論串 (同標題文章)
java 近期熱門文章
PTT數位生活區 即時熱門文章