何时使用抽象类或接口?

Jav*_*esp 28 java abstract-class interface

为什么要创建抽象类或接口类,或者何时应该使用抽象类或接口类?

Sam*_*ijo 41

当您只想声明类必须具有哪些方法和成员时,使用接口.任何实现该接口的人都必须声明并实现该接口列出的方法.

如果您还想要一个默认实现,请使用抽象类.扩展抽象类的任何类都必须只实现其抽象方法和成员,并且将具有抽象类的其他方法的一些默认实现,您可以覆盖它们.

--EDIT - 忘了提,Earwicker提醒我

最后,您可以根据需要实现任意数量的接口,但只能扩展一个类(无论是抽象的还是抽象的).在选择之前请记住这一点.

  • 这不是根本区别 - 你可以创建一个只有抽象方法的abtract类. (2认同)

Dan*_*ker 17

关键的区别在于,您可以implement在一个类中使用多个接口,但只能extend使用一个抽象类.这是因为抽象类还可以定义存储数据的字段,而接口则不能.


Mne*_*nth 12

抽象类是一个类,它至少有一个抽象方法,或者你也可以将所有方法都作为抽象方法.显然它无法实例化.您必须从一个抽象类继承并在继承类中实现抽象方法(即扩展抽象类的类).

接口根本不是类(因此不要将它们称为接口类).接口定义方法的签名而无需任何实现.接口也没有成员字段.如果在类中实现接口,则必须为接口提供的所有方法提供实现.

为某些东西定义一个通用API是有意义的,它可以有完全不同的实现.抽象类对于主要相同的类更有用,但有一些细微的差别.您可以将两种方法结合起来

一个很好的例子是Java类库的集合框架.您有接口List,它定义了Lists的行为方式.一些实现例如是ArrayList和LinkedList.因为它们的行为相似,所以两者都相同的东西在抽象类AbstactList中实现,都继承了它.