※ 引述《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 验证一下)
:
: