是Java 8中任何用途的抽象类

时间:2014-03-28 19:19:53

标签: java oop interface abstract-class java-8

我一直在阅读一些关于新Java 8功能的文章。随着扩展方法的引入,即以default关键字为前缀并提供实现的方法。

我在这里检查了几个问题,其中人们询问了抽象类和接口的差异,例如herehere,最大的区别似乎是抽象类允许你指定默认实现。

这是否意味着抽象类和接口之间的区别很大程度上是美化的,并且考虑到类可以实现多个接口;它们在设计和实施方面提供了更大的灵活性。

我可以看到抽象类仍然存在,主要是为了向后兼容旧代码。我是不是正确使用未来的抽象类并仅使用接口?如果没有你能提供一个例子,那么在抽象类中定义一些字段并不算数。我正在寻找一个引人注目的用例,与Interfaces相比,Abstract Classes仍然更适合。

另一方面,纯粹主义者会争辩说默认实现会污染接口,这些接口应该只指定契约,行为应该总是在Concrete类中(行为的一部分可能在抽象类中)。这个论点有什么价值吗?

1 个答案:

答案 0 :(得分:9)

抽象类可以有构造函数和状态。即使使用扩展方法,接口也不能具有任何状态。因此,例如,对于#getSize或#setSize方法的基本“大小”状态建模,您仍然需要一个Abstract类。