gpt4 book ai didi

java - 接口(interface)比抽象类有什么优势?

转载 作者:太空狗 更新时间:2023-10-29 22:42:03 24 4
gpt4 key购买 nike

在 Java 中,抽象类提供了定义具体方法和抽象方法的能力,而接口(interface)只提供了实现抽象方法的能力。我相信在这两种情况下都可以覆盖子类/实现中的方法,因此,一个相对于另一个的真正优势是什么(Java 中的接口(interface)与抽象类)?

最佳答案

当您想说“我不在乎您是如何做的,但这是您需要完成的事情”时,界面就可以使用。

抽象类适用于当您想说“我知道您应该做什么,并且我知道在某些/许多情况下您应该怎么做。”

抽象类有一些严重的缺点。例如:

class House {

}

class Boat {

}

class HouseBoat extends /* Uh oh!! */ {
// don't get me started on Farmer's Insurance "Autoboathome" which is also a helicopter
}

可以通过接口(interface)打通:

interface Liveable {

}

interface Floatable {

}

class HouseBoat implements Liveable, Floatable {

}

现在,抽象类也很有用。例如,考虑 AbstractCollection 类。它为所有集合定义了非常常见的方法的默认行为,例如 isEmpty()contains(Object)。如果你愿意,你可以覆盖这些行为,但是......确定集合是否为空的行为真的有可能改变吗?通常它将是 size == 0。 (但它可以产生很大的不同!有时计算大小的成本很高,但确定某物是否为空就像查看第一个元素一样简单。)

而且由于它不会经常更改,开发人员是否真的值得为“已解决”类别中的每个方法每一次……一次……实现该方法?更不用说当您需要对其进行更改时,如果您必须在所有地方重新实现它,就会出现代码重复和遗漏错误。

关于java - 接口(interface)比抽象类有什么优势?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5835311/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com