作者PsMonkey (痞子军团团长)
看板java
标题Re: [问题] protected
时间Thu Dec 26 10:51:25 2013
※ 引述《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)
1F:推 broodstare:谢谢QQQQQQQQ 立马来研究!!!!! 真的很感谢!!! 12/26 11:07