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

Posted Kylin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于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 {

}

 

以上是关于关于protected在子类创建父类对象无法访问父类protected方法或成员的主要内容,如果未能解决你的问题,请参考以下文章

继承&多态

子类可以继承父类的一切方法,成员变量,甚至是私有的,但是却不能够访问这些私有的成员变量和方法

惊艳的继承_14

子类从父类继承过来的方法可以操作子类自己定义的成员变量吗

java继承

关于C++父类与子类之间变量的问题