我正在研究 Java 中的抽象概念。
这些是我的理解:
- 抽象是呈现函数签名和隐藏实现的方法,留给可以实现/扩展接口(interface)/抽象类的用户。
- 通过这种方式,我们可以实现更大范围的代码修改和可重用性。
- 我们可以将实时对象与程序代码中的对象密切相关。
这些是我的问题:
当所有的方法都抽象后,抽象类可以表现得像接口(interface),为什么我们还需要单独的接口(interface)?请举例说明以便更好地理解。
我们能否在功能基础上调用抽象类 = 接口(interface) + 继承?因为我们可以和抽象类一起实现接口(interface)和继承的功能。
简单地说:接口(interface)是契约,抽象类是骨架实现。 (此外,在 Java 中主要使用接口(interface),因为它不可能扩展多个类。)
契约(Contract)说明什么,实现说明如何。
接口(interface)示例: java.util.List
。它具有任何列表应具有的所有方法:add()
、size()
、indexOf()
等等。
抽象类示例: java.util.AbstractList
。虽然它有很多抽象方法,但一些 List
方法,不依赖于元素在具体列表中的存储方式,在那里实现(addAll()
, equals()
、toString()
等)。要创建完整的实现,并不是所有的 List
方法都应该被实现,从而使实现者的工作更容易。