gpt4 book ai didi

java - 接口(interface)中的默认方法

转载 作者:行者123 更新时间:2023-12-01 16:45:37 24 4
gpt4 key购买 nike

有一段时间我一直很困惑为什么我们需要接口(interface)中的默认方法,今天我正在阅读它。尽管我的问题很少得到解答,但我仍然有一些疑问。

举一个简单的例子,我有一个接口(interface)1。 A类和B类实现接口(interface)1。 Interface1 有一个方法 X。

interface interface1{
void methodX();
}

class A implements interface1{
@override
public void methodX(){
//something
};
}

class B implements interface1{
@override
public void methodX(){
//something
};
}

据我了解,由于向interface1添加新方法Y,会破坏A类和B类,因此引入了默认方法。这意味着现在我可以添加默认方法,而无需修改 A 类和 B 类。这也意味着对于 A 类和 B 类,默认方法必须足够通用才能执行我们期望它执行的操作.

现在,让我们考虑一下我们通常在接口(interface)中添加函数,以便我们可以通过覆盖它来为它们提供特定于类的实现。所以基本上,如果我在接口(interface)中添加方法 Y 作为默认值,那么我将期望类 A 和类 B(或类 A/ClassB)覆盖该方法。

这意味着,我将修改 A 类/B 类或两者。

这就是我困惑的地方。这可以通过创建一个新接口(interface)并修改 1 个(或两个)类来实现该新接口(interface)(扩展接口(interface) 1 的接口(interface) 2),然后在类中提供相同的实现来解决。

interface interface2 extends interface1{
void methodY();
}

class A implements interface2{
@override
public void methodY(){
//something
}
}

class B implements interface1{
@override
public void methodX(){
//something
};
}

默认方法实际上如何帮助我们不修改实现它的类。

最佳答案

默认方法提供某些行为的“基本”实现,这些行为可以由给定接口(interface)上的现有方法组成。例如,您有一个带有 add 的接口(interface)方法。这足以为 addAll 提供默认实现。行为:

default void addAll(Collection<? extends E> c) { for (E e : c) { add(e); } } 

另一个例子是 List 中的排序方法,可以通过提供的方法实现:get(int) , set(int,E) , size() 。子类可能会覆盖此默认实现,以便根据特定列表属性提供更有效的排序。在 LinkedList您可以利用附加/分离节点(插入或删除节点时无需向右移动元素),在ArrayList中您可以利用任何索引处元素的超快速访问)。

关于java - 接口(interface)中的默认方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51967519/

24 4 0
文章推荐: java - java 函数参数的求值顺序是什么
文章推荐: java - 我无法在Mysql Workbench中设置数据类型
文章推荐: Java添加对象到ArrayList