【发布时间】:2014-08-08 12:54:05
【问题描述】:
我正在阅读Head First Design Patterns 的书。
有一个例子谈到了Duck 基类:
class Duck
{
public void Quack()
{
}
public void Fly()
{
}
}
如果我创建一个不能像这样飞行的子类:
class CantFlyButQuackDuck : Duck
{
// I can use base Fly() here, but this kind of duck cannot fly!
}
所以,这本书说这很糟糕,因为子类不需要飞行,它必须覆盖任何内容。
但是,如果我不从 Child 类中调用 Fly() 也没关系。那为什么书上说不好呢?我将在我的应用程序中使用这个子类,例如:
CantFlyButQuackDuck myobj= new CantFlyButQuackDuck();
myobj.Quack();
【问题讨论】:
-
不叫Fly,不代表不能叫。像现在这些课程的样子,你的 CantFlyButQuackDuck 仍然可以飞。
-
然后添加 Print()、Scream() 和 DestroyTheWorld() 方法。只要你不打电话给他们……
-
你给鸭子添加了飞行能力,这是完全错误的。
-
编写类不仅仅是将一些属性和方法混为一谈。类构成了一个对象模型,它应该是合乎逻辑的和一致的。当一个类以它不应该有的成员结束时,那么你的模型是错误的。大错特错。
-
面向对象原则的基础是“Is A”与“Has A”的概念。也许这可以澄清:w3resource.com/java-tutorial/…
标签: java c# inheritance design-patterns