【问题标题】:What's a common practice of completing abstract class?完成抽象类的常见做法是什么?
【发布时间】:2010-06-01 07:11:47
【问题描述】:
你有一个类,它非常适合作为一个抽象类,但是如果没有派生类提供的数据,这个类就不能正常工作。将所有数据传递给构造函数并不方便,因为并非所有数据都可能需要,而且其中许多可以是动态的(来自子函数)。
组成这种结构的最佳做法是什么?
或者它本来就是一个糟糕的设计?
- 声明抽象函数,该子函数必须实现?
- 声明在子类中被覆盖的普通函数?
【问题讨论】:
标签:
php
class
theory
class-design
abstract-class
【解决方案1】:
如果该函数有一个合理的默认行为可以在大多数子项中依赖,则可以将其作为正常的执行。否则(没有默认行为和/或大多数孩子必须覆盖它),最好将其声明为抽象。副作用是您永远不会忘记在子类中定义它,因为不这样做会立即报告。
另一个机会是对特定于子类的数据使用容器(例如数组),但仍需进行一般检查或其他可在共同祖先中完成的处理。这样,您定义了一个保存数据的变量,但数据本身填充在子项中。父类中的代码可以遍历这个容器并对所有元素做一些例行的工作。