java的继承和组合何如选择

来源:互联网 发布:kido手表软件 编辑:程序博客网 时间:2024/04/28 05:55
【继承 与 组合】
继承的条件是:子类中有增加成员的属性,或修改了父类的方法,或有自己的方法。

组合的条件是:处于类复用的目的


下面先来看一个继承的demo

class Animal
{

private void beat()

{

System.out.println("心脏跳动");

}

public void  breath()

{

System.out.println("吸一口气,吐一口气,呼吸中...");

}

}
//继承Animal,直接复用父类的breath方法
class Bird extends Animal
{

public void fly()

{

System.out.println("我在天空自在的飞翔...");

}

}
//继承Animal,直接复用父类的breath方法
class Wolf extends Animal
{

public void run()

{

System.out.println("我在陆地上快速奔跑...");

}

}

public class InheritTest 

{

public static void main(String[] args)

{

Bird b = new Bird();

b.breath();

b.fly();

Wolf w = new Wolf();

w.breath();

w.run();

}

}

**********************************************************************************************************************************

然后是 组合 的 demo

class Animal
{

private void beat()

{

System.out.println("心脏跳动");

}

public void breath()

{

this.beat();

System.out.println("吸一口气,吐一口气,呼吸中...");

}

}
class Bird
{

//将原来的父类嵌入原来的子类,作为子类的一个组合成分

private Animal a;

public Bird(Animal a)//这里其实一个构造器   创建对象之前 将创建好的Animal对象传入 然后将Animal对象的引用付给了当前对象

{

this.a = a;

}

//重新定义一个breath方法

public void breath()

{

//直接复用Animal提供的breath方法来实现Bird的breath方法

a.breath();

}

public void fly()

{

System.out.println("我在天空自由自在的飞翔");

}

}
class Wolf
{

//将原来的父类嵌入原来的子类,作为子类的一个组合成分

private Animal a;

public Wolf(Animal a)//这里其实一个构造器   创建对象之前 将创建好的Animal对象传入 然后将Animal对象的引用付给了当前对象

{

this.a = a;

}

//重新定义一个自己的breath方法

public void breath()

{

//直接复用Animal提供的breath方法来实现Wolf的breath方法

a.breath();

}

public void run()

{

System.out.println("我在陆地上快速奔跑");

}

}
public class CompositeTest 
{

public static void main(String[] args)

{

//此时需要显式创建被嵌入的对象

Animal a1 = new Animal();

Bird b = new Bird(a1);

b.breath();

b.fly();

//此时需要显式创建被嵌入的对象

Animal a2 = new Animal();

Wolf w = new Wolf(a2);

w.breath();

w.run();

}

}

组合是把旧类对象作为新类的Field嵌入,用以实现新类的功能,用户看到的是新类的方法,而不能看到被嵌入对象的方法。因此,通常需要在新类里使用private修饰被嵌入的旧类对象。


总之,继承要表达的是一种“是 is-a”的关系,而组合表达的是“有has-a”的关系



0 0
原创粉丝点击