質問: aa; } } //Aを継承 public class B extends A { protected int b; super.setA(b); } //Aを継承 public class C extends A { protected int c; super.setAa(c); } ``` という感じでB,CともにAを継承しています。 **まずは、継承について質問させていただきます。** 継承は、派生(能力の付加等)で使われていることはわかりました。 しかし、使うとprotectedは便利で、メインとサブの情報のやり取りが自由なのでどちらかというと接続といった感じだと捉えていましたが、最近、やはり派生か・・と。というのも 上記のコードで言えば **B←A→C** という考えだったものが結局は*new* で作るインスタンスとほぼ変わらず、Aの初期クラスを個々に派生する **A→B A→C** という考えに至りました。 **この認識で合っていますかというのが一つ。** この考えに至った経緯とともに**セッターについての質問をさせていただきます。** 簡単に言えばA経由でCからBの変数にアクセスしよう思ったがAの変数int a値が初期値だったため、派生元は同じだが別々に存在すると考えました。つまり、私の考えている **セッターで受け取った値の変数aと変数aaを派生元で比較しbooleanで結果を返すことは不可能かというのが二つ。** 最後は**ゲッターのタイミング**です。 セッターとゲッターが存在しますが、例えば ``` private int y; public int getY(){return y;} public void setY(int y){this.y =y;} ``` と単純なものがあったとして、**セッターが値を受け取ったときのゲッターはその値を返してくれるのでしょうか、それとも初期値を返しますかというのが三つ目です。** お手数お掛けします。
回答: 質問1 ==== > > B←A→C という考えだったものが結局はnew で作るインスタンスとほぼ変わらず、Aの初期クラスを個々に派生する > > A→B A→C という考えに至りました。 > > この認識で合っていますかというのが一つ。 > > > `B←A→C` や `A→B A→C` が何を表しているのか良く分かりませんが、とりあえず A を主役として喋っておられる事は理解しました。 クラス A は、B および C が A から継承している事は知りません。 つまり A からすると B に b があり、C に c がある事など分かりません。(リフレクションを使うとかいうのは無しです) 質問2 ==== 以下のソースを見て下さい。 ``` //Aを継承 class B extends A { } //Aを継承 class C extends A { } public class A{ protected int a; public void setA(int a) { this.a = a; } public int getA() { return this.a; } public static void main(String[] args) { B b = new B(); C c = new C(); b.setA(1); System.out.println(c.getA()); // 0 になります c.setA(2); System.out.println(b.getA()); // 1 になります System.out.println(c.getA()); // 2 になります } } ``` B のインスタンス b と、C のインスタンス c は、A のインスタンスを共通部分に持つわけではありません。 > > セッターで受け取った値の変数aと変数aaを派生元で比較しbooleanで結果を返すことは不可能かというのが二つ。 > > > というのが良く意味が分かりませんが、このソースの通り、b の持つ A 部分、c の持つ A 部分は別で保持されると考えて下さい。 質問3 ==== ``` private int y; public int getY(){return y;} public void setY(int y){this.y =y;} ``` インスタンス単位に y は保持されます。上記の例で、c から返る getA と b から返る getA が異なる事で理解いただけるかと思います。ですので > > セッターが値を受け取ったときのゲッターはその値を返してくれるのでしょうか、それとも初期値を返しますかというのが三つ目です。 > > > インスタンスが同じであればその値が返ります。 極端な例を言うと B のインスタンスを b1, b2, b3, b4, b5, b6... b100 という100個の変数で作った場合、それぞれ別の setA/getA を操作出来ます。