關於protected在子類創建父類對象無法訪問父類protected方法或成員
阿新 • • 發佈:2017-07-10
.cn logs alt ack 對象 extends 允許 javase ref
子類(父類的外部包)中訪問父類的protetcted屬性或者方法,是不可以通過創建父類對象調用的。
註意:此處不討論同包下的父類子類,因為同包下所有類都可訪問protected屬性或者方法。
請參見Java官方文檔:Chapter 6. Names中的6.6.2.1. Access to a protected Member
具體例子如下:
1 package c; 2 public class C { 3 protected int id; 4 protected void test() { 5 6 } 7 }
子類S:在包s下
1 packages; 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方法或成員