天天看點

一起來看引用與現實的邂逅 | 帶你學《Java面向對象程式設計》之二十二

上一篇:領略Java藝術之萬物皆“數組” | 帶你學《Java面向對象程式設計》之二十一

【本節目标】

通過閱讀本節内容,你将初步掌握由現實世界物物相聯而展現到Java世界中的類之間與類本身互相關聯的實作方法,并通過合理化拆分類内元素達到高可用的要求。

引用傳遞是整個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()) ;
     }    
}           
一起來看引用與現實的邂逅 | 帶你學《Java面向對象程式設計》之二十二

圖二 執行結果圖

本次所操作的兩個類型:Person、Car都是自定義類型,但是Person和Car都可以明确的描述出某一類群體,現在是針對于群體關系做出的一種設定。

引用應用分析二:(自身關聯)

現在已經确定好人與車的關系,但是現在可以進一步進行該操作的完善,例如:一個人有孩子,孩子也可以在成年之後有車。

一起來看引用與現實的邂逅 | 帶你學《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 ;   //一個人有一輛車
    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()) ;
         }
     }    
}           
一起來看引用與現實的邂逅 | 帶你學《Java面向對象程式設計》之二十二

圖四 執行結果二

這些關系的比對都是通過引用資料類型的關聯來完成的。

引用應用分析三(合成設計模式)

假設現在要求定義出一種可以描述電腦組成的類,那麼在這樣的狀态下就必須進行拆分,電腦分為兩部分:顯示器和主機;而主機上需要設定有一系列的硬體。

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面向對象程式設計文章檢視此處