结合使用组合(composition)和继承(inheritance)

同时使用组合和继承是很常见的事。下例就展示了同时使用这两种技术,并配以必要的构造

器初始化,来创建更加复杂的类:

 

//:c06:PlaceSetting.java

// Combiningcomposition & inheritance.

import com.bruceeckel.simpletest.*;

 

class Plate {

  Plate(int i) {

    System.out.println("Plate constructor");

  }

}

 

class DinnerPlate     extends Plate {

  DinnerPlate(int i) {

super(i);

    System.out.println("DinnerPlate constructor");

  }

}

 

class Utensil {

  Utensil(int i) {


 

 

 

    System.out.println("Utensil constructor");

  }

}

 

class Spoon  extends Utensil {

  Spoon(int i) {

super(i);

    System.out.println("Spoon constructor");

  }

}

 

class Fork    extends Utensil {

  Fork(int i) {

super(i);

    System.out.println("Fork constructor");

  }

}

 

class Knife   extends Utensil {

  Knife(int i) {

super(i);

    System.out.println("Knife constructor");

  }

}

 

// A culturalway of doing something:

class Custom {

  Custom(int i) {

    System.out.println("Custom constructor");

  }

}

 

public  class PlaceSetting extends Custom {

private   static Test monitor = new Test();

private Spoon sp;

private Fork frk;

private Knife kn;

private DinnerPlate pl;

public PlaceSetting(int i) {

super(i + 1);

    sp = new Spoon(i + 2);

    frk =   new Fork(i + 3);

    kn = new Knife(i + 4);

    pl = new DinnerPlate(i + 5);


 

 

 

    System.out.println("PlaceSetting constructor");

  }

public   static    void main(String[] args) {

    PlaceSetting x = new PlaceSetting(9);

    monitor.expect(new String[] {

"Customconstructor",

"Utensilconstructor",

"Spoonconstructor",

"Utensilconstructor",

"Forkconstructor",

"Utensilconstructor",

"Knifeconstructor",

"Plateconstructor",

"DinnerPlateconstructor",

"PlaceSettingconstructor"

    });

  }

}   ///:~

 

虽然编译器强制你去初始化基类,并且要求你要在构造器起始处就要这么做,但是它并不监

督你必须将成员对象也初始化,因此在这一点上你自己必须时刻注意。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值