【发布时间】:2016-11-28 04:13:08
【问题描述】:
我知道抽象类是包含声明方法的类,这些方法不一定都有指定的实现,因为代码必须在子类中声明,但我发现很难理解引入背后的 OOP 概念接口。
如果抽象类没有定义的方法和状态(除了抽象类可以有构造函数),接口和抽象类在架构和原理上的区别是什么?
此外,为什么任何人都应该首先使用抽象类和接口?我知道它对您的代码增加了限制,不允许人们在没有指定方法的情况下定义子类,但是如果接口和抽象类中不存在未实现的声明方法,则代码将以完全相同的方式工作。那么编写没有实现的方法只是为了稍后在子类中实现它的隐含好处是什么?
我看过很多关于接口与抽象类的帖子,但我对两者之间的原则差异感兴趣,而不是它们的功能差异。
【问题讨论】:
-
对我来说,接口是一种与 API 消费者强制执行合同的方法 - 例如。一个汽车接口——应该有四个轮子,应该有方向盘——没有例外。抽象类用于抽象对象的行为,例如 for一个活的东西 - 一个非常抽象的物体,有许多不同的行为。所以将生物表示为抽象类
-
你是先用谷歌搜索的吗?这个话题已经在这里完成了,肯定有解决这个问题的现有答案。
-
我用谷歌搜索了它......也死了。我还没有经历那个“啊哈”的时刻,我在挣扎
-
更多解释可能无济于事。我的建议是查看 jdk 库源代码中的示例,从 java.util 开始,看看 java.util.List、ArrayList 和 AbstractList 是如何工作的,也许看看 java.sql。 java.io 有很好的在装饰器模式中使用接口的例子..