繁体   English   中英

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

[英]What is the difference of abstract class and non-abstract class when inheriting

我已经在php中搜索了使用抽象类优于非抽象类的优势。 我知道不能实例化抽象类,这是单例设计模式的一个很好的功能。 但是我的观点是,由于它们都可以充当基类,因此还有其他理由使用抽象类吗? 像这样的所有答案如果我在php中使用抽象类,什么好处? 我发现没有提到这一点,他们只是回答了另一个问题,即使用基类的好处是什么? 因此,我的问题是,除了不能实例化抽象类之外,是否有任何理由使用抽象基类?

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

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

您不能覆盖常规方法并将其抽象,但是您必须(最终)覆盖所有抽象方法并使它们抽象。

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

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

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

例如,抽象class Dog具有抽象方法Dog::Bark() 但是所有的狗吠叫都不同。 因此,在每个Dog子类中,您必须具体描述狗吠的方式,因此必须定义例如SmartDog::Bark()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM