组合比较灵活。继承只能有一个父类,但是组合可以有多个属性。
对于is -a关系建议使用继承,has-a关系建议使用组合。
比如:Student is a Person这个逻辑没问题,但是:Student has a Person就有问题了。这时候,显然继承关系比较合适。
再比如:笔记本和芯片的关系显然是has-a关系,使用组合更好。
package com.it.test;
/**
* 测试组合
*/
public class TestComponent {
class Person2 /*extends Object*/{//自动继承Object类
String name;
int height;
public void rest(){
System.out.println("休息!");
}
}
class Student2 /*extends Person2*/ {//不可以继承多个类 单继承
String major;//专业
Person2 person2 = new Person2();//组合:在子类中新建一个父类对象,作为子类属性
public void study(){
System.out.println("学习!");
person2.rest();
System.out.println(this.person2.name);
}
public Student2(String name,int height,String major){
this.person2.name = name;
this.major = major;
this.person2.height = height;
}
}