一个结合composition 和inheritance的简单例子:
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");
}
}
class Custom {
Custom(int i)
{
System.out.println("Custom constructor");
}
}
public class PlaceSetting extends Custom {
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(1);
}
}
要注意,子类中的构造函数应该在基类的构造函数之后调用。
运行结果为:
Custom constructor
Utensil constructor
Spoon constructor
Utensil constructor
Fork constructor
Utensil constructor
Knife constructor
Plate constructor
DinnerPlate constructor
PlaceSetting constructor