接口和抽象类之间的OOP原理差异

时间:2016-07-24 22:00:02

标签: oop interface abstract

我理解抽象类是包含声明的方法的类,这些类并不一定都具有指定的实现,因为代码必须在子类中声明,但我发现很难理解引入后面的OOP概念接口。

如果抽象类没有已定义的方法和状态(除了抽象类可以有构造函数的事实),接口和抽象类之间的架构和原理区别是什么?

此外,为什么任何人都应该首先使用抽象类和接口?我知道它增加了对代码的限制,不允许人们在没有指定方法的情况下定义子类,但如果接口和抽象类中不存在未实现的声明方法,代码将以完全相同的方式工作。那么编写没有实现的方法的隐含好处只是为了以后在子类中实现它?

我在Interface和Abstract Classes上看过很多帖子,但我对两者之间的原则差异感兴趣,而不是它们的功能差异。

1 个答案:

答案 0 :(得分:0)

一年后回到我自己的问题,我发现了我想要的答案。

无论是否抽象,类总是试图定义/设计实体从其行为到状态的外观。在抽象类的情况下,我们正在建模一个我们不希望在运行时实例化的想法/实体。例如,如果我们有一个关于狗和猫的应用程序,我们可能想要定义动物是什么,然后通过扩展我们的基础动物类来扩展这个想法以定义狗/猫是什么。动物对象永远不会被实例化,但是狗/猫会。

另一方面,接口是一组方法,表示从任何类中预期的某种形式的交互。只要一个类实现了一个接口,你就会知道它有哪些方法。因此,您可以拥有两个实现相同接口的彼此不相关的实体(类)。例如,狗和人类可以都实现“摘要”界面。这意味着它们都能够消化食物,因为我们已明确说明界面中有哪些功能可以实现食物消化行为。显然,实现的细节不同,因此在实现它们的类中概述了接口中定义的函数。