“高级”组件是具有根据其他“低级”组件定义的行为的类。这样的示例是Bulb类需要Socket类来实现其LightOn()行为。
并非所有超类都是高级组件,并非所有子类都是低级组件。由于以下示例。
来自头部设计模式的模板方法模式。
public abstract class CaffeineBeverage {
final void prepareRecipe() {
boilWater();
brew();
pourInCup();
addCondiments();
}
abstract void brew();
abstract void addCondiments();
void boilWater() {
System.out.println("Boiling water");
}
void pourInCup() {
System.out.println("Pouring int cup");
}
}
public class Coffee extends CaffeineBeverage {
public void brew() {
System.out.println("Dripping Coffee through filter");
}
public void addCondiments() {
System.out.println("Adding Sugar and Milk");
}
}
在此示例中,CaffeineBeverage
类的行为为prepareRecipe()
。此行为需要brew()
和addCondiments()
的子类实现。
所以......这意味着CaffeineBeverage
(超类)是高级组件,Coffee
(子类)是低级组件。
public class superClass {
public go() {
//super class implementation
}
}
public class subClass extends superClass {
public go() {
//sub class implementation
}
}
在这种情况下,superClass
并不需要subclass
来实施其go()
方法。
即使一个类有抽象方法需要子类来实现它,DOESNT意味着超类是高级组件。见下面的例子。
public abstract class superClass {
public abstract go();
}
public class subClass extends superClass {
public go() {
//subclass implementation;
}
}
main() {
superClass s = new subClass();
s.go();
}
这里的s不是superClass对象......这里是subClass对象。
答案 0 :(得分:1)
是不是说所有超类都不是子类的高级组件?
是的,这是正确的...假设您正确使用“组件”一词。实际上,作为一般规则,继承不会对组件进行建模。
例如:
public abstract class Mammal extends Animal {
....
}
public class Cat extends Mammal {
....
}
猫不是哺乳动物的“组成部分”,哺乳动物不是动物的“组成部分”。这不是对“组合”或“容器”关系建模。它正在建立分类关系;即“猫”是“哺乳动物”,“哺乳动物”是“动物”。
你的第一个例子有点令人困惑/困惑,因为类名和方法有相互矛盾的含义(在我看来)。但看起来你正在塑造饮料制造设备。如果这是正确的,那么你真正建模的关系是“is-a”而不是“component-of”/“part-of”。
最后,不要陷入与现实世界相关的类和继承“意味着什么”的问题。实际上,Java类很少用于直接模拟现实世界的东西。 (你不太可能在实际程序中看到模拟猫和咖啡机的类。)继承的真正效用在于它为代码提供结构的能力......而不是它的能力(粗略地模拟现实世界。