接口优于抽象类的优势是什么?

zod*_*zod 17 java oop

抽象类具有具体和抽象的功能.接口只有抽象功能.

两者都可以覆盖.是吗

一个人比另一个人的实时优势是什么?

cor*_*iKa 39

当你想说"我不在乎你怎么做,但这就是你需要完成的事情"时,接口就是用来做的.

当你想说"我知道你应该做什么,我知道你应该如何在一些/许多案例中做到这一点"时,抽象类就是适用的.

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

class House {

}

class Boat {

}

class HouseBoat extends /* Uh oh!! */ {
    // don't get me started on Farmer's Insurance "Autoboathome" which is also a helicopter
}
Run Code Online (Sandbox Code Playgroud)

您可以通过界面获得:

interface Liveable {

}

interface Floatable {

}

class HouseBoat implements Liveable, Floatable {

}
Run Code Online (Sandbox Code Playgroud)

现在,抽象类也非常有用.例如,考虑AbstractCollection类.它为所有集合定义了非常常见的方法的默认行为,例如isEmpty()contains(Object).如果您愿意,可以覆盖这些行为,但是...是确定集合是否为空的行为确实可能会更改?通常它会是size == 0.

而且由于它不会经常改变,开发人员是否真的值得每一个......单个...时间......为那个"已解决"的类别中的每个方法实现该方法?更不用说当你需要对它进行更改时,如果你不得不在任何地方重新实现它,你将会有代码重复和错过的错误.

  • +1 lol at"//不要让我开始使用Farmer's Insurance"Autoboathome"这也是一架直升机" (4认同)
  • 在中型/大型项目中,对于某些模块将支持的接口达成一致也很有帮助.您需要了解其他模块的功能,其他模块可以了解模块的功能. (2认同)

Oli*_*rth 16

接口很有用,因为Java没有多重继承(但您可以根据需要实现任意数量的接口).

当您需要基类的具体行为时,抽象类很有用.