2021年6月23日 星期三

JAVA 物件導向的概念-03 物件中有物件的探索

   這一篇我試著讓物件中有其他物件,或是使用物件的方法產生另一個物件。以下是類別 A 和類別 B 的程式碼。結果是可行的,可見 JAVA 在編寫上有一定的自由度。

類別 B 只是單純的類別,

// 編寫人:Lancelot Cheng
public class B {
int b1 = 10000;
public double b2() {
return 1.0;
}

public int getB1() {
return b1;
}

public void setB1(int b1) {
this.b1 = b1;
}

}

類別 A 中有定義 a4 為 B 物件,a2 方去中也有定義 a3 為 B 的物件。

// 編寫人:Lancelot Cheng
public class A {
int a1 = 1;

B a4 = new B();

public double a2() {
B a3 = new B();
System.out.println(a3.getB1());
return 1.0;
}

public int getA1() {
return a1;
}

public void setA1(int a1) {
this.a1 = a1;
}

public B getA4() {
return a4;
}

public void setA4(B a4) {
this.a4 = a4;
}
}

再來是主程式,定義 m1 為 A 物件,使用 m1.a2 方法,得到了為 B 物件的 a3 之 b1 值。也可以用 m1.getA4() 方法得到為 B 物件的 a4 之位址。

// 編寫人:Lancelot Cheng
public class Main {

public static void main(String[] args) {
System.out.println("Main");

A m1 = new A();
System.out.println(m1.getA1());
m1.a2();
System.out.println(m1.getA4());
}
}

以下是結果。

Main
1
10000
B@7f63425a

Process finished with exit code 0

上述是 A 物件擁有 B 物件的寫法,程式上可以跑。
然而,如果你的程式是 A 、 B 物件互相擁有對方,程式就會出錯了,
無窮的配置記憶體過給新物件,直到不夠。
另外我又試了 A 物件擁有 A 物件的寫法,一樣可行。只是記憶體也是會被配置到不夠。
JAVA 允許這種寫法,只是不知道有沒有用到的機會。當然用時要設好條件,
不然記憶體也是會被配置到不夠。
(從後來我做的結合關係範例看來,只宣告不實作的情況下,可以避免記憶體一直配置給新物件的問題。)
(觀念變好後,回來看這一篇,發現用詞不精確,有空再來修改。)




沒有留言:

張貼留言