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")