私は保護された識別子に関するいくつかの疑問を持っています。継承された後の保護されたメンバの動作。
"サブクラス外パッケージが保護されたメンバを継承すると、(サブクラスによって継承された)そのメンバは、保護されたメンバを継承します。サブクラスのサブクラスを除いて、サブクラスの外のコードに対してプライベートになります。 "
私は上記の記述を反映したサンプルコードを提供しました。それは私にはっきりと分かります。
// 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