Javaの授業 14 [ クラスとオブジェクト その4 ] | Let's Re⇒move

Javaの授業 14 [ クラスとオブジェクト その4 ]


例 :クラスの中にクラス
---------------------------------------------
Class4_1.java
---------------------------------------------
class Class4_1 {
Class4_2 obj;

Class4_1(boolean flg) {
if(flg) {
obj = new Class4_2();
}
}

Class4_1(int a, String b) {
obj = new Class4_2(a,b);
}
}
--------------------------------------------
Class4_2.java
--------------------------------------------
class Class4_2 {
int a;
String b;

Class4_2() {
a = 0;
b = "無し";
}

Class4_2(int a, String b) {
this.a = a;
this.b = b;
}

void method4() {
System.out.println("aの値は = " + a + " bの値は = " + b);
}
}
--------------------------------------------
Execute.java
--------------------------------------------
class Execute {
public static void main(String[] args) {
Class4_1 obj1 = new Class4_1(true); //①
Class4_1 obj2 = new Class4_1(false); //②
Class4_1 obj3 = new Class4_1(100, "main");  //③
obj2.obj = new Class4_2(200, "main2");    //④

obj1.obj.method4();
obj2.obj.method4();
obj3.obj.method4();
}
}
--------------------------------------------
Executeから順を追って見る。

① Class4_1 obj1 = new Class4_1(ture);  →obj1 = インスタンス①
Class4_1型の変数obj →インスタンスを作成
型[Class4_1]、引数[boolian]のコンストラクタを確認

Class4_1(boolean flg) {
if(flg) {
obj = new Class4_2();  →インスタンス① obj = インスタンス②
}
flgにtrueを代入。→新たにインスタンスを作成。
型[Class4_2]、引数()のコンストラクタを確認。

Class4_2() {
a = 0;
b = "無し";   →インスタンス② a = 0
} b= "無し"

この段階で obj1 は a = 0;
b = "無し";

②Class4_1 obj2 = new Class4_1(false); obj2 = インスタンス③
上記と同じ型、引数。
flgに代入されるのがfalseの為何も行わない。→インスタンス③ obj = null

③Class4_1 obj3 = new Class4_1(100, "main");  obj3 = インスタンス④
型[Class4]、引数(int,String)のコンストラクタを確認

Class4_1(int a, String b) {
obj = new Class4_2(a,b); →インスタンス④ obj = インスタンス⑤
}
(int a,String b)に(100,"main")を代入。
型[Class4_2]、引数(int,String)のコンストラクタを確認

Class4_2(int a, String b) {
this.a = a;
this.b = b;
}
(int a,String b)に(100,"main")を代入。→インスタンス⑤ a = 100
    this.a = 100 b = "main"
this.b = "main"

④obj2.obj = new Class4_2(200, "main2"); →obj2.obj = インスタンス⑥
obj2.objを確認。→obj = null           (インスタンス③から⑥へ参照先変更)
型[Class4_2]、引数(int,String)のコンストラクタ確認(上記)
(int a,String b)に(200,"main2")を代入。→インスタンス⑥ a = 200
this.a = 200 b = "main2"
this.b ="main2"

obj1~3のa,bの値を表示するメソッドmethod4を実行。
 obj1.obj.method4();  →obj1 →インスタンス②(a = 0 , b ="無し")
 obj2.obj.method4(); →obj2 →インスタンス⑥(a = 200 , b = "main2")
 obj3.obj.method4(); →obj3 →インスタンス④.obj→インスタンス⑤(a = 100 , b = "main")