在Java中抽象类的抽象方法和接口的抽象方法除了它们的访问权限有什么主要区别吗?请赐教。我正在使用Java7。抽象类的抽象方法与java中接口的抽象方法的区别
1
A
回答
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,接口的方法是public
和abstract
,正如你提到的接口访问修饰符默认为public
。
但是对于Java 8来说,界面就是游戏改变者。接口将具有与抽象类相同的功能,您可以使用该方法的默认实现。
欲了解更多信息,请参阅 - http://docs.oracle.com/javase/tutorial/java/IandI/defaultmethods.html
0
一方面,你有一些技术上的差异:
- 接口方法隐含
public abstract
- 接口可以使用
extends
多次 - 抽象类可以包含一些实现的功能(接口只能在JDK 8+中使用)
在实践中开发人员可以使用它们来实现有点不同的功能:
- 抽象类主要用来大多继承树的顶部(假设类动物,猫延长动物,狗伸出动物)。动物可能具有所有动物常见的一些功能(例如getName())
- 接口只是标记行为。 (令人讨厌的界面,蚊子实现令人讨厌,电话推销员实现令人讨厌)。电话推销员和蚊子都有方法
annoy()
。
0
抽象方法不包含默认实现并依赖于实现类。抽象方法以a结尾;并且不使用{},因为该方法不能包含实现。它的子类必须提供实现。抽象类可以有抽象和非抽象的方法。抽象类的目的是隐藏内部细节并仅向用户显示实现。
相关问题
- 1. 接口和抽象方法的区别
- 2. 抽象方法重写抽象方法
- 3. 具有抽象类参数的抽象方法的Java抽象类
- 4. 建议从抽象类中的方法调用抽象方法
- 5. 抽象方法
- 6. 抽象方法
- 7. 抽象类中的方法的外部抽象和局部抽象之间有什么区别?
- 8. 接口抽象的所有方法?
- 9. PHP:接口内的抽象方法
- 10. 非抽象类不能覆盖Comparable中的抽象方法compareTo?
- 11. 从抽象类中的回调调用抽象方法
- 12. 类不抽象,也不重写java.util.timertask中的抽象方法run()
- 13. 抽象类的方法覆盖另一个抽象类
- 14. 调用抽象类方法中的接口方法
- 15. C++:用抽象方法创建抽象类并重写子类中的方法
- 16. 为什么你需要知道抽象类的抽象方法是否抽象
- 17. Java抽象方法签名
- 18. Java - 覆盖抽象方法
- 19. C#抽象方法
- 20. 抽象类工厂方法
- 21. 抽象类方法声明
- 22. 使用抽象类方法
- 23. 在抽象类中调用非抽象类方法
- 24. 在java中实现抽象方法/类
- 25. 什么非抽象空洞的方法,抽象类
- 26. 错误:类不是抽象的,不重写抽象方法
- 27. 抽象类线程安全的非抽象方法
- 28. 抽象类抽象方法的部分实现
- 29. 非抽象类不提供抽象方法的实现
- 30. 抽象类使用它自己的抽象方法?
是的。但是你需要告诉我们你感兴趣的是哪个版本的。 –
我不认为接口每个说法都有'abstract'方法,但是简单的协议要求实现必须满足。所有由接口声明的方法都必须是公共的。你不能有一个抽象方法,没有类被抽象 – MadProgrammer
@MadProgrammer从[JLS](https://docs.oracle.com/javase/specs/jls/se6/html/interfaces.html#9.4):“在接口的主体中的每个方法声明都是隐式的'抽象'“ – Andreas