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

作者: sbrhsieh (十年一夢)   2014-05-11 02:37:54
※ 引述《pzyc79 (I'm bored)》之銘言:
: 標題: [問題] 在子類別new建構子為protected的父類別
: 時間: Sun May 11 00:53:48 2014
:
: ===============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不是可以在子類別中看見嗎?
我覺得這一篇的問題同 #1J5-rnUZ [問題] Object的clone()問題。
就是誤解了 protected member 可被不同 package 的 subtype 存取的意義。
先把你的 sample code 稍微改成這樣:
// a/Test.java
package a;
public class Test {
protected Test() {
System.out.println("Test::Test()");
}
}
// b/Test2.java
package b;
import a.Test;
public class Test2 extends Test {
public static void main(String[] args) {
new Test2();
}
}
編譯沒問題啊,那麼 Test2 的確可以"看的見" Test 的 protected constructor 呀,
不然編譯器幫你添加的 public Test2::Test2() constructor 怎麼可以 invoke
Test::Test() constructor?(跑跑看 b.Test2 驗證一下)
:
:
作者: gmoz ( This can't do that. )   2014-05-11 09:29:00
作者: pc2990 (Ryu)   2014-05-15 21:20:00
太強了 這篇是正解..

Links booklink

Contact Us: admin [ a t ] ucptt.com