我在实践中并没有多多使用抽象类,虽然我明白它们是什么:一种指定子类的方法必须实现哪些方法。
我刚刚通过Doxygen创建了一个Kohana项目,可以完整地看到类层次结构。我看到,在链条的顶端我们有一个工厂:
abstract class Kohana_Model {
public static function factory($name){
// Add the model prefix
$class = 'Model_'.$name;
return new $class;
}
}
直接在它下面继承,我们有一个空的抽象类:
abstract class Model extends Kohana_Model {}
...在此之下,有三个继承的类:Kohana_Model_Database
,Kohana_ORM
和Model_Foobar
。
有人请为此解释编程推理 - 在链中有一个空的抽象类的目的是什么? (而且,根本没有?)
为什么不让Kohana_Model_Database,Kohana_ORM和Model_Foobar直接从Kohana_Model继承,当(显然?)Model和Kohana_Model之间没有其他分支或继承?
答案 0 :(得分:5)
您正在寻找的答案是Cascading File System和Transparent Extensions。
答案 1 :(得分:2)
它允许您通过调用
来创建模型class News_Model extends Model
默认情况下会自动扩展Kohana_Model
,事情会变得很糟糕。
它还允许您通过创建自己的模型文件来扩展Kohana_Model
class Model extends Kohana_Model
覆盖抽象Model类,并允许您添加自定义功能。然后,当您将Kohana版本升级到(例如)3.4时,您的扩展模型不会被新的Kohana文件覆盖。