结合使用组合(composition)和继承(inheritance)
2013-08-22 16:50
411 查看
同时使用组合和继承是很常见的事。下例就展示了同时使用这两种技术,并配以必要的构造
器初始化,来创建更加复杂的类:
//: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"
});
}
} ///:~
虽然编译器强制你去初始化基类,并且要求你要在构造器起始处就要这么做,但是它并不监
督你必须将成员对象也初始化,因此在这一点上你自己必须时刻注意。
![](http://www.jiangyea.com/boke/00.jpg)
器初始化,来创建更加复杂的类:
//: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"
});
}
} ///:~
虽然编译器强制你去初始化基类,并且要求你要在构造器起始处就要这么做,但是它并不监
督你必须将成员对象也初始化,因此在这一点上你自己必须时刻注意。
![](http://www.jiangyea.com/boke/00.jpg)
相关文章推荐
- [阅读笔记]面向对象的设计法则--法则1:优先使用(对象)组合,而非(类)继承 Favor Composition Over Inheritance
- 源码-使用组合替代继承实现新类(Using Composition Rather Than Inheritance)
- 用继承(inheritance)和组合(composition)设计
- java中组合和继承的结合使用
- 俺使用的C语言面向对象范式(第二节:构造Composition 与 第三节:继承Inheritance)
- 继承(inheritance),组合(composition),聚合(aggregation)
- 继承(inheritance)与组合(composition)
- 从头认识java-6.3 组合使用聚合和继承
- JAVA使用继承还是组合
- 【转】代码复用原则:合理使用类组合和类继承
- 面向对象的设计法则(1)——优先使用(对象)组合,而非(类)继承(转)
- 『C/C++』C++中的继承和组合区别使用
- 代码复用原则:合理使用类组合和类继承
- 关于何时使用继承和何时使用组合的做法
- 重构第8天:使用委托代替继承(Replace Inheritance with Delegation)
- 设计模式----优先使用对象组合,而非类继承
- 为什么优先使用组合而不是继承
- 为什么要优先使用组合而不是继承 .
- js 组合继承(使用原型模式和构造函数模式)和原型式继承
- Inheritance, Association, Aggregation, and Composition 类的继承,关联,聚合和组合的区别