组合Aggregation / Composition
定义
什么是
一个类内使用另外一个类作为属性
表达含义
有
名词
组合 / 聚合
Composition / Aggregation
组合解决代码重用
基本方案
Animal.java
1 2 3 4 5 6 public class Animal { public int age; public void eat() { System.out.println("Animal eat()"); }}
Person.java
1 2+3-4 5-6-7-8 9 10 11 public class Person { public Animal animal; public int age; public double balance; public void eat() { System.out.println("Person eat()"); } public void work() { System.out.println("Person work()"); }}
Dog.java
1 2+3-4-5-6-7 8 9 10 public class Dog { public Animal animal; public int age; public void eat() { System.out.println("Dog eat()"); } public void bark() { System.out.println("Dog bark()"); }}
Zoo.java
1 2 3 4 5 6 7 8 9 10 11 public class Zoo { public static void main(String[] args) { new Zoo().run(); } public void run() { Dog dog = new Dog(); dog.animal = new Animal(); dog.animal.eat(); }}
封装
Person.java
1 2*3 4 5+6+7+8 9+10+11+12 13 14 15 public class Person { private Animal animal; public double balance; public Person() { animal = new Animal(); } public void eat() { animal.eat(); } public void work() { System.out.println("Person work()"); }}
Zoo.java
1 2 3 4 5 6 7 8-9*10 11 public class Zoo { public static void main(String[] args) { new Zoo().run(); } public void run() { Dog dog = new Dog(); dog.animal = new Animal(); dog.eat(); }}
差异化
Person.java
1 2 3 4 5 6 7 8 9 10 11+12 13 14 15 16 public class Person { private Animal animal; public double balance; public Person() { animal = new Animal(); } public void eat() { animal.eat(); System.out.println("Person eat()"); } public void work() { System.out.println("Person work()"); }}