关于protected在子类创建父类对象无法访问父类protected方法或成员

子类(父类的外部包)中访问父类的protetcted属性或者方法,是不可以通过创建父类对象调用的。
注意:此处不讨论同包下的父类子类,因为同包下所有类都可访问protected属性或者方法。

请参见Java官方文档:Chapter 6. Names中的6.6.2.1. Access to a protected Member
具体例子如下:

父类C:在包c下

1 package c;
2 public class C {
3   protected int id;
4   protected void test() {
5 
6   }
7 }

子类S:在包s下

 1 package s;
 2 import c;
 3 import q;
 4 import t;
 5 public class S extends C {
 6 void accessProtected() {
 7   //C中的protected仅允许其子类S内部访问
 8   id = 5;
 9   test();
10   //此外通过E.id访问(在C子类S的内部),则E必须是S或者S的子类(注意不是C)
11   S s = new S();
12   s.id = 6;
13   s.test();
14 
15   Q q = new Q();
16   q.id = 5;
17   q.test();
18 
19   //此外通过E.id访问(在C子类S的内部),则E必须是S或者S的子类(注意不是C)
20   //所以c.id不可访问
21   // C c = new C();
22   // c.id;
23   // c.test();
24 
25   //此外通过E.id访问(在C子类S的内部),则E必须是S或者S的子类(注意不是C)
26   //所以t.id不可访问
27   // T t = new T();
28   // t.id;
29   // t.test();
30   }
31 }

S的子类Q,包q下

package q;
import s;
public class Q extends S{

}

C的子类T,包t下

package t;
import c;
public class T extends C {

}

 

posted @ 2017-07-10 11:09  KylinStayHere  阅读(1402)  评论(0编辑  收藏  举报