抽象类的抽象方法与java中接口的抽象方法的区别

时间:2015-09-07 02:30:46

标签: java oop design-patterns

在Java中,除了访问权限之外,抽象类的抽象方法和接口的抽象方法之间有什么主要区别?请赐教。我使用的是Java7。

3 个答案:

答案 0 :(得分:0)

技术上,abstract类和interface之间的方法或签名没有区别。但这些方法的使用有所不同。

public class Son extends AbstractChild , Father{//Cannot do as multiple inheritance not supported

}

public class Son extends AbstractChild implements Naughtiness, Cuteness{//Allowed}

根据JLS,接口的方法是publicabstract,正如您所提到的,接口的访问修饰符默认为public

然而,对于Java 8,界面是游戏规则改变者。接口将具有抽象类的相同功能,您可以使用该方法的默认实现。

有关详细信息,请参阅 - http://docs.oracle.com/javase/tutorial/java/IandI/defaultmethods.html

答案 1 :(得分:0)

一方面,您有一些技术差异:

  • 界面方法是隐含的public abstract
  • 接口可以多次使用extends
  • 抽象类可以包含一些实现的功能(接口只能在JDK 8 +中使用它)

在实践中,开发人员使用它们来实现一些不同的功能:

  • 抽象类主要用于继承树之上(假设类Animal,Cat扩展Animal,Dog extends Animal)。动物可能具有一些常见的功能(例如getName())
  • 接口只标记行为。 (Annoyable界面,Mosquito实现Annoyable,Telemarketer实现Annoyable)。电话推销员和蚊子都有方法annoy()

答案 2 :(得分:0)

抽象方法不包含默认实现,而是依赖于实现类。抽象方法以a结尾;并且不使用{},因为该方法不能包含实现。它的子类必须提供实现。抽象类可以有抽象和非抽象方法。抽象类的目的是隐藏内部细节并仅向用户显示实现。