Sam*_*ijo 41
当您只想声明类必须具有哪些方法和成员时,使用接口.任何实现该接口的人都必须声明并实现该接口列出的方法.
如果您还想要一个默认实现,请使用抽象类.扩展抽象类的任何类都必须只实现其抽象方法和成员,并且将具有抽象类的其他方法的一些默认实现,您可以覆盖它们.
--EDIT - 忘了提,Earwicker提醒我
最后,您可以根据需要实现任意数量的接口,但只能扩展一个类(无论是抽象的还是抽象的).在选择之前请记住这一点.
Mne*_*nth 12
抽象类是一个类,它至少有一个抽象方法,或者你也可以将所有方法都作为抽象方法.显然它无法实例化.您必须从一个抽象类继承并在继承类中实现抽象方法(即扩展抽象类的类).
接口根本不是类(因此不要将它们称为接口类).接口定义方法的签名而无需任何实现.接口也没有成员字段.如果在类中实现接口,则必须为接口提供的所有方法提供实现.
为某些东西定义一个通用API是有意义的,它可以有完全不同的实现.抽象类对于主要相同的类更有用,但有一些细微的差别.您可以将两种方法结合起来
一个很好的例子是Java类库的集合框架.您有接口List,它定义了Lists的行为方式.一些实现例如是ArrayList和LinkedList.因为它们的行为相似,所以两者都相同的东西在抽象类AbstactList中实现,都继承了它.