1. 程式人生 > >關於protected在子類創建父類對象無法訪問父類protected方法或成員

關於protected在子類創建父類對象無法訪問父類protected方法或成員

.cn logs alt ack 對象 extends 允許 javase ref

技術分享

子類(父類的外部包)中訪問父類的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方法或成員