组合
使用组合的访问权限
组合是在新的类中使用现有类的功能,即在新的类中嵌入某个对象。
class Door {
public Window window = new Window();
}
在使用组合的时候应该注意声明组合类的访问权限,用private修饰的方法是不能够被这个新类访问的,也就是说将成员对象声明为public,或如果是在同一个包下可以用protected修饰。
class Window {
//在同一个包下可以用protected修饰
protected void rollup(){
System.out.println("window rollup");
}
}
class Door {
//不可用private修饰
public Window window = new Window();
}
class Car {
private Door
left = new Door(), right = new Door();
public static void main(String[] args) {
Car car = new Car();
car.left.window.rollup();
}
}
/* Output
window rollup
*///:~
初始化使用组合的类
class Meal {
public Meal(){
System.out.println("++Meal++");
}
}
class Meal1 {
public Meal1(){
System.out.println("++Meal1++");
}
}
class Meal2 {
public Meal2(){
System.out.println("++Meal2++");
}
}
class Meals {
private Meal m0 = new Meal();
private Meal1 m1 = new Meal1();
public Meals(){
System.out.println("++meals++");
}
private Meal2 m2 = new Meal2();
public static void main(String[] args) {
new Meals();
}
}
/* Output
++Meal++
++Meal1++
++Meal2++
++meals++
*///:~
在创建这个类实例的时候,并没有直接执行它的构造函数,而是从上到下依次先执行组合方法的构造函数,然后才执行这个类的构造函数;