我对Java 8的接口的默认方法特性有疑问。这意味着在java8中,您可以在接口中为方法提供默认实现,这样就不再需要实现类来覆盖该方法。
现在,接口还可以包含抽象方法,以及与抽象类相同的具体方法。两者都有相同的行为方式。说到接口和抽象方法之间的区别,可以识别为- 1。一个类可以实现多个接口,但只能扩展一个类。2.所有接口字段都是public static final,而在抽象类的情况下,您可以控制字段和方法的访问修饰符。
我的疑问是,到底区别在哪里,我们应该去抽象类还是接口?分别拥有抽象类和接口的实际目的是什么?
发布于 2015-04-26 16:38:18
在java8中,abstract class和interface之间的差异变得更小了。但它们之间仍然存在差异。我将尝试指出这些差异。如果我错过了什么请告诉我。
你可以在这个主题上找到oracle doc here。
interface的Virtual extension methods/ Default Methods/Defender Methods是造成这种微小差异的主要原因。因此,我将尝试描述在Java 8中引入这些类型的方法的必要性。
在java 8中引入了lambda。为了充分利用lambda集合框架已经更新。在Iterable接口中添加了forEach方法。在不破坏实现的情况下更改接口是不可行的。默认方法用于在不中断实现的情况下添加功能。
@FunctionalInterface
public interface Iterable<T> {
Iterator<T> iterator();
default void forEach(Consumer<? super T> action) {
Objects.requireNonNull(action);
for (T t : this) {
action.accept(t);
}
}
}我添加了来自here的代码快照,以演示default method的可用性。因此,我认为您必须根据自己的需求在abstract class和interface之间做出选择。
发布于 2015-04-26 12:48:52
接口是完全抽象的类。Java需要这两者。你可以在这里找到一些有用的信息。Difference between an interface and an abstract class
你也可以看到这个问题。What is the difference between an interface and abstract class
https://stackoverflow.com/questions/29873805
复制相似问题