java基礎學習——11、組合

來源:互聯網
上載者:User

標籤:返回   bsp   nali   分配   相關   com   splay   boolean   複用   

我們已經嘗試去定義類。定義類,就是建立了一種類型(type)。有了類,我們接著構造相應類型的對象。更進一步,每個類型還應該有一個清晰的介面(interface),供使用者使用。

我們可以在一個新類的定義中使用其他對象。這就是組合(composition)。組合是在Java中實現程式複用(reusibility)的基本手段之一。

 

我們下面定義一個Battery類,並用power來表示其電量。一個Battery的可以充電(chargeBattery)和使用(useBattery)。我們在隨後的Torch類定義中使用Battery類型的對象作為資料成員:

 

class Battery {    public void chargeBattery(double p)    {        if (this.power < 1.) {            this.power = this.power + p;        }    }    public boolean useBattery(double p)    {        if (this.power >= p) {            this.power = this.power - p;            return true;        }        else {            this.power = 0.0;            return false;        }    }    private double power = 0.0;}class Torch{    /**      * 10% power per hour use     * warning when out of power     */    public void turnOn(int hours)    {        boolean usable;        usable = this.theBattery.useBattery( hours*0.1 );        if (usable != true) {            System.out.println("No more usable, must charge!");        }    }    /**     * 20% power per hour charge     */    public void charge(int hours)    {        this.theBattery.chargeBattery( hours*0.2 );    }    /**     * composition     */    private Battery theBattery = new Battery();}

 

上面的new為theBattery對象分配記憶體,不可或缺。

我們定義Battery類。Torch類使用了一個Battery類型的對象(theBattery)來作為資料成員。在Torch的方法中,我們通過操縱theBattery對象的介面,來實現Battery類所提供的功能(functionality)。

我們說,一個Torch對象擁有(has-a)一個Battery對象。上述關係可以表示成:

 

通過組合,我們可以複用Battery相關的代碼。假如我們還有其他使用Battery的類,比如手機,計算機,我們都可以將Battery對象組合進去。這樣就不用為每個類單獨編寫相關功能了。

 

我們可以增加一個Test類,看看實際效果:

public class Test{    public static void main(String[] args)    {        Torch aTorch = new Torch();        System.out.println("Charge: 2 hours");        aTorch.charge(2);        System.out.println("First Turn On: 3 hours");        aTorch.turnOn(3);        System.out.println("Second Turn On: 3 hours");        aTorch.turnOn(3);    }}

上面程式的運行結果:

Charge: 2 hours
First Turn On: 3 hours
Second Turn On: 3 hours
No more usable, must charge!

我們通過組合來使用了電池對象所提供的功能,比如探測電量是否用盡(根據useBattery()的傳回值)。

 

java基礎學習——11、組合

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.