作者lovdkkkk (dk)
看板java
标题Re: [问题] 在子类别new建构子为protected的父类别
时间Sun May 11 10:27:48 2014
※ 引述《bleed1979 (十三)》之铭言:
: ※ 引述《pzyc79 (I'm bored)》之铭言:
: : ===============Class Test:===============
: : package a;
: : public class Test {
: : protected Test(){
: : }
: : }
: : ===============Class Test2:==============
: : package b;
: : import a.Test;
: : public class Test2 extends Test{
: : void fun(){
: : Test t = new Test(); //Test() is not visible
: : }
: : }
: : WHY? 宣告protected不是可以在子类别中看见吗?
: 前面的文章太多结果论了,回归到定义面吧。
: http://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html
: Constructors are not members ... blabla ...
: http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html
: 这是作用在 members 上的。
: end
稍做补充
根据定义,连 call 方法也是不行的,
也就是在 Test2 中以下这行也会错:
// 假设 Test 有一个 public constructor
// 并有一个 protected method
new PublicConstructorOfTest().protectedMethod();
因为 Test 并不是自己的 subclass,
不能在其它 package 中生一个 Test 的实体,
然後透过它来 call Test 的 protected 方法。
实测下来结果也是如此,参见 gist
https://gist.github.com/anonymous/2d80bf9eb1581ed05fc6
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 36.226.196.214
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/java/M.1399775273.A.2D9.html
※ 编辑: lovdkkkk (36.226.196.214), 05/11/2014 10:29:09
1F:→ lovdkkkk:贴完 github 马上挂掉...0rz 05/11 10:37
2F:→ sbrhsieh:都搞错重点,跟 constructor 算不算 member 没关系 05/11 20:35
3F:→ sbrhsieh:跟 Test 是不是自己的 subclass 也没关系。 05/11 20:36
4F:→ sbrhsieh:new Test().protectedMethod(); 合不合格是看 statement 05/11 20:38
5F:→ sbrhsieh:出现的context。不要往为什麽一个Test object 会不能执行 05/11 20:40
6F:→ sbrhsieh:自己的 protected method 这方向硬要想一个理由。 05/11 20:41
我只是很单纯的照官方文件说法去看
截录:
within its own package (as with package-private) and, in addition,
by a subclass of its class in another package.
官方说明的就是这两个条件
1. 在同 package 里 call
2. 由 subclass call
所以我才会由
是不是同 package 或 是不是 subclass 去看 @@
※ 编辑: lovdkkkk (36.226.196.214), 05/11/2014 21:22:42