保護されたアクセスとは、パッケージに関係なく、パッケージおよびサブクラス内のメンバーにアクセスできることを意味することを理解しています。理解しにくいのは、サブクラスで、保護されたメンバーを持つクラスのオブジェクトを作成すると、「見えない」というエラーが発生することです。これは、次のコード (YiFan Wu による回答に基づく拡張バージョン) によって示されます。パッケージの内外に同じコード行があることに注意してください。したがって、私は2つの質問があります:
- オブジェクトを使用するとすべてが変わるのはなぜですか?
このオブジェクト アクセスの違いは、パッケージ内では発生しません。つまり、クラス A1 の test() を参照してください。
package a; public class A{ protected int a; } class A1{ public void test(){ A ref = new A(); ref.a=8; // no issue } } package b; public class B extends A{ } package c; public class C extends B{ public void accessField(){ a = 2; //That works. A ref = new A(); ref.a=8; // not visible!! }
}
どんな助けでも大歓迎です...
ありがとう、ショーン。