2015-09-07 134 views
1

在Java中抽象类的抽象方法和接口的抽象方法除了它们的访问权限有什么主要区别吗?请赐教。我正在使用Java7。抽象类的抽象方法与java中接口的抽象方法的区别

+0

是的。但是你需要告诉我们你感兴趣的是哪个版本的。 –

+0

我不认为接口每个说法都有'abstract'方法,但是简单的协议要求实现必须满足。所有由接口声明的方法都必须是公共的。你不能有一个抽象方法,没有类被抽象 – MadProgrammer

+3

@MadProgrammer从[JLS](https://docs.oracle.com/javase/specs/jls/se6/html/interfaces.html#9.4):“在接口的主体中的每个方法声明都是隐式的'抽象'“ – Andreas

回答

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

0

一方面,你有一些技术上的差异:

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

在实践中开发人员可以使用它们来实现有点不同的功能:

  • 抽象类主要用来大多继承树的顶部(假设类动物,猫延长动物,狗伸出动物)。动物可能具有所有动物常见的一些功能(例如getName())
  • 接口只是标记行为。 (令人讨厌的界面,蚊子实现令人讨厌,电话推销员实现令人讨厌)。电话推销员和蚊子都有方法annoy()
0

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