gpt4 book ai didi

java - 不是所有的父类(super class)都是子类的高级组件,这样说对吗?

转载 作者:行者123 更新时间:2023-12-01 15:25:12 26 4
gpt4 key购买 nike

“高级”组件是一个类,其行为是根据其他“低级”组件定义的。例如,Bulb 类需要 Socket 类来实现其 LightOn() 行为。

并非所有父类(super class)都是高级组件,也并非所有子类都是低级组件。因为下面的例子。

来自头部优先设计模式的模板方法模式。

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 (父类(super class))是高级组件,Coffee (子类)是低级组件。

public class superClass {
public go() {
//super class implementation
}
}

public class subClass extends superClass {
public go() {
//sub class implementation
}
}

在本例中,superClass 不需要 subclass 来实现其 go() 方法。

即使一个类具有需要子类实现的抽象方法,也不意味着父类(super class)是高级组件。请参阅下面的示例。

public abstract class superClass {
public abstract go();
}

public class subClass extends superClass {
public go() {
//subclass implementation;
}
}

main() {
superClass s = new subClass();
s.go();
}

这里的 s 不是父类(super class)对象...这里的 s 是子类对象。

最佳答案

Is it right to say that not all superclass is the high-level component of the subclass?

是的,这样说是正确的......假设您以正确的方式使用“组件”一词。事实上,作为一般规则,继承不会对组件进行建模。

例如:

  public abstract class Mammal extends Animal {
....
}

public class Cat extends Mammal {
....
}

猫不是哺乳动物的“组成部分”,哺乳动物也不是动物的“组成部分”。这不是对“组合”或“容器”关系进行建模。它正在建模分类关系;即猫"is"哺乳动物,哺乳动物"is"动物。

<小时/>

你的第一个例子有点令人困惑/困惑,因为类名和方法具有矛盾的含义(在我看来)。但看起来您正在为饮料制作设备建模。如果这是正确的,那么您真正建模的关系是“is-a”而不是“component-of”/“part-of”。

<小时/>

最后,不要陷入类和继承相对于现实世界的“含义”这一点上。在实践中,Java 类很少用于直接对现实世界的事物进行建模。 (您不太可能在实际程序中看到模拟猫和咖啡机的类。)继承的真正用途在于它为代码提供结构的能力......而不是它的能力(粗略地)对现实世界进行建模。

关于java - 不是所有的父类(super class)都是子类的高级组件,这样说对吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10263951/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com