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