【本節目标】
通過閱讀本節内容,你将初步掌握由現實世界物物相聯而展現到Java世界中的類之間與類本身互相關聯的實作方法,并通過合理化拆分類内元素達到高可用的要求。
引用傳遞是整個Java開發設計過程之中最為重要的技術組成,引用傳遞也與實際的生活密切相關。
引用應用分析一:(類關聯結構)
假設生活品質比較好的人可以有一輛汽車,當然,一些生活較差的人是沒有汽車的,隻能依靠步行。要求可以通過面向對象的設計來解決實作以上的關系轉換。

圖一 人與車之間的關系圖
class Car {
private String name ;
private double price ;
private Person person ; //車應該屬于一個人
public Car(String name , double price) {
this.name = name ;
this.price = price ;
}
public void setPerson(Person person) {
this.person = person ;
}
public Person getPerson {
return this.person ;
}
public String getInfo() {
return “汽車品牌型号:” + this.name + “、汽車價值:” + this.price ;
}
}
class Person {
private String name ;
private int age ;
private Car car ; //一個人有一輛車
public Person(String name ,int age) {
this.name = name ;
this.age = age ;
}
public void setCar(Car car) {
this.car = car ;
}
public Car getCar {
return this.car ;
}
public String getInfo() {
return “姓名:” + this.name + “、年齡:” + this.age ;
}
}
public class ArrayDemo {
public static void main (String args[ ]) {
//第一步:聲明對象并且設定彼此關系
Person person = new Person(“林強”, 29) ;
Car car = new Car(“賓利”,8000000.00) ;
person.setCar(car) ; //一個人有一輛車
car.setPerson(person) ; //一輛車屬于一個人
//第二步:根據關系擷取資料
System.out.println(person.getCar().getInfo()) ; //代碼鍊
System.out.println(car.getPerson().getInfo()) ;
}
}
圖二 執行結果圖
本次所操作的兩個類型:Person、Car都是自定義類型,但是Person和Car都可以明确的描述出某一類群體,現在是針對于群體關系做出的一種設定。
引用應用分析二:(自身關聯)
現在已經确定好人與車的關系,但是現在可以進一步進行該操作的完善,例如:一個人有孩子,孩子也可以在成年之後有車。
圖三 人、後代與車的關系
class Car {
private String name ;
private double price ;
private Person person ; //車應該屬于一個人
public Car(String name , double price) {
this.name = name ;
this.price = price ;
}
public void setPerson(Person person) {
this.person = person ;
}
public Person getPerson {
return this.person ;
}
public String getInfo() {
return “汽車品牌型号:” + this.name + “、汽車價值:” + this.price ;
}
}
class Person {
private String name ;
private int age ;
private Car car ; //一個人有一輛車
private Person children [] ; //一個人有多個孩子
public Person(String name ,int age) {
this.name = name ;
this.age = age ;
}
public void setChildren(Person children []) {
this.children = children ;
}
public Person [] getChildren() {
return this.children ;
}
public void setCar(Car car) {
this.car = car ;
}
public Car getCar {
return this.car ;
}
public String getInfo() {
return “姓名:” + this.name + “、年齡:” + this.age ;
}
}
public class ArrayDemo {
public static void main (String args[ ]) {
//第一步:聲明對象并且設定彼此關系
Person person = new Person(“吳碩”, 29) ;
Person childA = new Person(“林強”,18) ;
Person childB = new Person(“郭仁義”,19) ;
childA.setCar(new Car(“BMW X1” ,300000.00)) ; //匿名對象
childB.setCar(new Car(“法拉利” ,1500000.00)) ; //匿名對象
Person.setChildren(new Person [] {childA ,childB}) ; //一個人有多個孩子
Car car = new Car(“賓利”,8000000.00) ;
person.setCar(car) ; //一個人有一輛車
car.setPerson(person) ; //一輛車屬于一個人
//第二步:根據關系擷取資料
System.out.println(person.getCar().getInfo()) ; //代碼鍊
System.out.println(car.getPerson().getInfo()) ;
//根據人找到所有的孩子以及孩子對應的車
for (int x = 0 ; x < person.getChildren().length ; x ++) {
System.out.println(“\t|-” + person.getChildren ()[x].getInfo()) ;
System.out.println(“\t\t|-” + person.getChildren
()[x].getCar.getInfo()) ;
}
}
}
圖四 執行結果二
這些關系的比對都是通過引用資料類型的關聯來完成的。
引用應用分析三(合成設計模式)
假設現在要求定義出一種可以描述電腦組成的類,那麼在這樣的狀态下就必須進行拆分,電腦分為兩部分:顯示器和主機;而主機上需要設定有一系列的硬體。
class 電腦{
private 顯示器 對象數組 [] ;
private 主機 對象;
}
class 顯示器{}
class 主機{
private 主機闆 對象 ;
private 滑鼠 對象 ;
private 鍵盤 對象 ;
}
class 主機闆{
private 記憶體 對象數組 [] ;
private CPU 對象數組 [] ;
private 顯示卡 對象
private 硬碟 對象數組 [] ;
}
class 鍵盤{}
class 滑鼠{}
class 記憶體{}
class CPU{}
class 顯示卡{}
class 硬碟{}
任何的人類的科技産品都可以進行拆分,而後進行重新組合的,是以這樣的設計在Java中被稱為合成設計模式。
想學習更多的Java的課程嗎?從小白到大神,從入門到精通,更多精彩不容錯過!免費為您提供更多的學習資源。
本内容視訊來源于
阿裡雲大學 下一篇:來自現實世界的邀請:映射轉換 | 帶你學《Java面向對象程式設計》之二十三 更多Java面向對象程式設計文章檢視此處