繁体   English   中英

为什么要使用抽象类

[英]Why use abstract classes

我一直在讨论高级OOP的主题,我发现自己一遍又一遍地问一个问题...当在子类中定义了所有方法时,为什么要使用抽象类。 子类不能独立于抽象类使用而不会引起问题吗?

为什么要使用抽象类

有人可能会认为这是一个很好的解决方案,但是抽象类有助于遵循DRY原理,而接口则不能帮助您解决这一问题。 但是,这需要付出一定的代价(例如,对基类实现的更改可能会破坏扩展它的类),并且您通常应该尽可能使用接口。

子类不能独立于抽象类使用而不会引起问题吗?

扩展特定的前任产品使您能够使扩展它的不同类可以互换。

假设您需要任何种类的鸟。 鸭子和母鸡都延伸鸟类这一事实意味着您将接受母鸡和鸭子。 您可能会说您只需要飞翔的鸟,这将意味着您将不再接受母鸡(jcan跳而不飞),但会继续接受老鹰。 但是,如果您说您需要一只鸭子-这意味着您需要一只鸭子,并且不接受任何其他种类的鸟类。 一个类扩展了另一个类(是否抽象)或接口的事实,使您可以将其作为参数传递给需要基类实例的函数。

当需要在基类中实现某些东西时,可以使用抽象类,而子类应在同一方法中实现另一种逻辑。 例如,我们需要实现服务,该服务可以解析不同类型的文件:

  • 我们有一个基类,它设置文件名,用于将数据存储到数据库中的方法和用于解析文件的抽象方法
  • 我们有XLS,XLSX和CSV文件的实现,这些方法在方法处理方面有不同的实现。

这是一个很好的解决方案。 但这并不意味着您应该使用这种方式。 您可以实现一种模式,或者根本不使用OOP。 这只是实现逻辑的一种方式。

暂无
暂无

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

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