Php 继承时抽象类和非抽象类有什么区别
在php中使用抽象类比使用非抽象类好几个小时了。我知道抽象类不能实例化,这是singleton设计模式的一个好特性。但我的观点是,既然它们都可以用作基类,那么还有其他理由使用抽象类吗?我发现的所有答案都没有提到这一点,它们只是回答了另一个问题,即使用基类的优势是什么?Php 继承时抽象类和非抽象类有什么区别,php,class,inheritance,abstract,Php,Class,Inheritance,Abstract,在php中使用抽象类比使用非抽象类好几个小时了。我知道抽象类不能实例化,这是singleton设计模式的一个好特性。但我的观点是,既然它们都可以用作基类,那么还有其他理由使用抽象类吗?我发现的所有答案都没有提到这一点,它们只是回答了另一个问题,即使用基类的优势是什么? 所以,我的问题是,除了不能实例化之外,还有什么理由使用普通基类以外的抽象基类吗?抽象类不能直接实例化,但它可以同时包含抽象和非抽象方法 如果扩展抽象类,则必须实现其所有抽象函数,或者使子类抽象 不能重写常规方法并使其抽象,但必须(
所以,我的问题是,除了不能实例化之外,还有什么理由使用普通基类以外的抽象基类吗?抽象类不能直接实例化,但它可以同时包含抽象和非抽象方法 如果扩展抽象类,则必须实现其所有抽象函数,或者使子类抽象 不能重写常规方法并使其抽象,但必须(最终)重写所有抽象方法并使其非抽象 抽象关键字用于将类或方法标记为模式。它类似于接口,但可以包含变量和方法的实现 关于抽象类有很多误解。下面是一个抽象Dog类的示例。如果一个开发人员想要为其他开发人员或自己创建一些基本的Dog类来进行扩展,他会将该类声明为抽象类。您不能直接实例化Dog类(没有人可以),但您可以通过自己的类扩展Dog。SmartDog扩展了Dog等 Dog类声明为抽象的所有方法必须在扩展Dog的每个类中手动实现
例如,抽象
类Dog
有一个抽象方法Dog::Bark()
。但是所有的狗吠叫的方式都不同。因此,在每个Dog子类中,您必须具体描述狗是如何吠叫的,因此您必须定义例如SmartDog::Bark()
“抽象类不能实例化,这是singleton设计模式的一个很好的特性”一个与另一个没有多大关系,请以后能够以任何方式实现这些方法?这在很大程度上取决于您如何设计应用程序,没有“这总是更好”的规则。有时您最好使用其中一个,有时另一个执行Dog::Bark()
中的逻辑,即使您正在为SmartDog::Bark()
实现自己的逻辑。我的意思是,如果一只狗用嘴汪汪叫,并且它在dog::Bark()
中实现,您是否需要重新声明逻辑,即一只狗用嘴汪汪叫在SmartDog::Bark()
中,或者它会留下来