Re: [問題] 在子類別new建構子為protected的父類別

看板java作者 (dk)時間11年前 (2014/05/11 10:27), 11年前編輯推噓0(006)
留言6則, 2人參與, 最新討論串5/8 (看更多)
※ 引述《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://www.ptt.cc/bbs/java/M.1399775273.A.2D9.html ※ 編輯: lovdkkkk (36.226.196.214), 05/11/2014 10:29:09

05/11 10:37, , 1F
貼完 github 馬上掛掉...0rz
05/11 10:37, 1F

05/11 20:35, , 2F
都搞錯重點,跟 constructor 算不算 member 沒關係
05/11 20:35, 2F

05/11 20:36, , 3F
跟 Test 是不是自己的 subclass 也沒關係。
05/11 20:36, 3F

05/11 20:38, , 4F
new Test().protectedMethod(); 合不合格是看 statement
05/11 20:38, 4F

05/11 20:40, , 5F
出現的context。不要往為什麼一個Test object 會不能執行
05/11 20:40, 5F

05/11 20:41, , 6F
自己的 protected method 這方向硬要想一個理由。
05/11 20:41, 6F
我只是很單純的照官方文件說法去看 截錄: 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
文章代碼(AID): #1JRk0fBP (java)
討論串 (同標題文章)
文章代碼(AID): #1JRk0fBP (java)