继承时抽象类和非抽象类有什么区别

时间:2013-10-09 09:02:17

标签: php class inheritance abstract

我已经搜索了几个小时的使用抽象类而不是php中的非抽象类的优点。我知道抽象类无法实例化,这是单例设计模式的一个很好的特性。但我的观点是,既然它们都可以作为基类,还有其他理由使用抽象类吗?像我发现的What are the advantage if i use abstract class in php?这样的所有答案都没有提到这个,他们只回答了另一个问题,即使用基类有什么好处? 所以,我的问题是,有没有理由使用除普通基类之外的抽象基类,除非它无法实例化?

1 个答案:

答案 0 :(得分:1)

抽象类不能直接实例化,但它可以包含抽象和非抽象方法。

如果扩展抽象类,则必须实现其所有抽象函数,或者使子类抽象化。

你不能覆盖常规方法并使其成为抽象方法,但你必须(最终)覆盖所有抽象方法并使它们成为非抽象方法。

抽象关键字用于将类或方法标记为模式。它类似于接口,但可以包含变量和方法的实现。

关于抽象类有很多误解。这是一个抽象Dog类的例子。如果开发人员想为其他开发人员创建一些基本的Dog类,或者为了自己扩展,他将该类声明为抽象。你不能直接实例化Dog类(没人可以),但你可以通过自己的类来扩展Dog。 SmartDog扩展了Dog等。

Dog类声明为抽象的所有方法必须在每个扩展Dog的类中手动实现。

例如,摘要class Dog有一个抽象方法Dog::Bark()。但所有的狗都不同。因此,在每个Dog-subclasses中,您必须描述该狗如何具体吠叫,因此您必须定义例如SmartDog::Bark()