我怀疑Java 8的接口默认方法功能。 使用java 8的方法可以为接口中的方法提供默认实现,这样就不再需要实现类来覆盖该方法。
现在接口也可以包含抽象方法以及与抽象类相同的具体方法。两者都以相同的方式表现。 谈论界面和抽象方法之间的差异可以像 - 1.可以为一个类实现多个接口,但只能扩展一个类。 2.所有接口字段都是public static final,而在抽象类的情况下,您可以控制字段和方法的访问修饰符。
我怀疑的是,我们是否应该选择抽象类或接口? 同时具有Abstract类和接口的实际目的是什么?
答案 0 :(得分:1)
在java 8中,abstract class
和interface
之间的差异变得更加狭窄。但它们之间仍然存在差异。
我会试着指出这些差异。如果我遗漏了什么请告诉我。
您可以在此主题上找到oracle doc here。
Virtual extension methods
的{{1}} / Default Methods
/ Defender Methods
是这种差异的主要原因。因此,我将尝试描述在Java 8中引入这些类型的方法的必要性。
在java 8中引入了lambda。充分利用lambda集合框架已经更新。在Iterable接口中添加了interface
方法。在不破坏实现的情况下更改接口是不可行的。默认方法用于添加功能而不会破坏实现。
forEach
我添加了here的代码快照,以展示@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);
}
}
}
的可用性。因此,我认为您必须根据自己的需要在default method
和abstract class
之间进行选择。
答案 1 :(得分:0)
接口是完全抽象的类。 Java需要它们。你可以在这里找到一些好的信息。 Difference between an interface and an abstract class
你也可以看到这个问题。 What is the difference between an interface and abstract class