A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 莫名12301 中级黑马   /  2015-7-16 21:15  /  671 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

我们已经尝试去定义类。定义类,就是新建了一种类型(type)。有了类,我们接着构造相应类型的对象。更进一步,每个类型还应该有一个清晰的接口(interface),供用户使用。

我们可以在一个新类的定义中使用其他对象。这就是组合(composition)。组合是在Java中实现程序复用(reusibility)的基本手段之一。

我们下面定义一个Battery类,并用power来表示其电量。一个Battery的可以充电(chargeBattery)和使用(useBattery)。我们在随后的Torch类定义中使用Battery类型的对象作为数据成员:

[url=][/url]
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();}[url=][/url]

上面的new为theBattery对象分配内存,不可或缺。

我们定义Battery类。Torch类使用了一个Battery类型的对象(theBattery)来作为数据成员。在Torch的方法中,我们通过操纵theBattery对象的接口,来实现Battery类所提供的功能(functionality)。

我们说,一个Torch对象拥有(has-a)一个Battery对象。上述关系可以表示成:

has-a: 手电有电池 (注意上面的菱形连线)

通过组合,我们可以复用Battery相关的代码。假如我们还有其他使用Battery的类,比如手机,计算器,我们都可以将Battery对象组合进去。这样就不用为每个类单独编写相关功能了。

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马