我對保護標識符有些疑惑。在K.Sierra的Sun認證的Java程序員學習指南的第一章中,我發現了以下信息:受保護的成員行爲一旦被繼承。
「一旦子包外部的包繼承了受保護的成員,該成員(由子類繼承)對子類外的任何代碼都是私有的,除了子類的子類之外。「
我提供了反映上述說明的示例代碼,這對我來說是絕對清楚的。
// Parent class
package package1;
import package2.Child;
public class Parent {
protected int i = 5;
}
// Child class
package package2;
import package1.Parent;
public class Child extends Parent {
// variable 'i' inherited
}
package package2;
public class Neighbour {
public void protectedTesting(){
Child child = new Child();
System.out.println(child.i); // no access
}
}
我已經開始嘗試並做了一個小改動 - 將鄰居移到了package1上。還有就是訪問「I」變量,它是對我來說有點令人驚訝,因爲它不是按照以聲明「變成私有的子類以外的任何代碼」
鄰居類變更後:
package package1;
import package2.Child;
public class Neighbour {
public void protectedTesting(){
Child child = new Child();
System.out.println(child.i); // access!
}
}
請向我澄清一下。謝謝。
詳細和解釋性的答案。 – MrKiller21