プライベート変数と継承についてもっと理解する必要があります。以前の私の理解では、クラスにフィールドがあり、クラスを継承しているとき、アクセス (プライベート変数) によって制限されていないフィールドが継承されたクラスに存在します。ただし、パブリック g/setter メソッドがあれば、基本クラスでプライベート変数を使用できます。
基本クラスのプライベート変数をどのように想像できますか?
プライベート変数と継承についてもっと理解する必要があります。以前の私の理解では、クラスにフィールドがあり、クラスを継承しているとき、アクセス (プライベート変数) によって制限されていないフィールドが継承されたクラスに存在します。ただし、パブリック g/setter メソッドがあれば、基本クラスでプライベート変数を使用できます。
基本クラスのプライベート変数をどのように想像できますか?
class A {
private int a;
public A(int a) { this.a = a; }
public int getA() {return a;}
}
class B extends A {
public B(int b) { super(b); }
public int getB() {return getA();}
}
int result = new B(10).getA();
結果は 10 になります。クラス A のプライベート フィールド a は一種の B に継承されますが、B は直接アクセスできません。クラス A で定義されている public/default/protected アクセサー メソッドを使用する場合のみ。B は A であるため、A にあるすべての同じフィールドと、クラス B で定義されたいくつかの新しいフィールドが常に含まれる可能性があります。
これは、Java チュートリアルhttp://docs.oracle.com/javase/tutorial/java/IandI/subclasses.htmlの内容です。
サブクラスは、親クラスのプライベート メンバーを継承しません。ただし、スーパークラスにプライベート フィールドにアクセスするためのパブリック メソッドまたはプロテクト メソッドがある場合、これらはサブクラスでも使用できます。
それでも、これを見て
class A {
private int i;
}
class B extends A {
}
B b = new B();
Field f = A.class.getDeclaredField("i");
f.setAccessible(true);
int i = (int)f.get(b);
i
正常に動作し、B インスタンスからフィールドの値を返します。つまり、B は を持っていi
ます。
プライベート変数/メンバーは継承されません。それが唯一の答えです。
public アクセサー メソッドを提供することは、カプセル化が機能する方法です。アクセスを制御できるように、データを非公開にし、その値を取得または設定するメソッドを提供します。