关联类的两种基本方法是inheritance
and composition
。当您在两个类之间建立继承关系时,您可以利用dynamic binding
and polymorphism
。
鉴于这种inheritance
关系很难更改interface
超类的 ,因此值得研究composition
. 事实证明,当您的目标是代码重用时,composition
提供了一种生成更易于更改代码的方法。
class Fruit {
// Return int number of pieces of peel that
// resulted from the peeling activity.
public int peel() {
System.out.println("Peeling is appealing.");
return 1;
}
}
class Apple extends Fruit {
}
class Example1 {
public static void main(String[] args) {
Apple apple = new Apple();
int pieces = apple.peel();
}
}
但是,如果在将来的某个时间点,您希望将peel() 的返回值更改为 type Peel
,您将破坏 Example1 代码的代码,即使 Example1 直接使用 Apple 并且从未明确提及 Fruit。
Composition
为 Apple 重用 Fruit 的peel()
. Fruit
Apple 可以保留对实例的引用并定义自己的peel()
方法来简单地调用Fruit,而不是扩展peel()
Fruit。这是代码:
class Fruit {
// Return int number of pieces of peel that
// resulted from the peeling activity.
public int peel() {
System.out.println("Peeling is appealing.");
return 1;
}
}
class Apple {
private Fruit fruit = new Fruit();
public int peel() {
return fruit.peel();
}
}
class Example2 {
public static void main(String[] args) {
Apple apple = new Apple();
int pieces = apple.peel();
}
}
Inheritance
给你比Composition
.