java - 从接口实现和从对象类扩展有什么区别?
问题描述
我是java新手,我希望这个问题不是太基本。我无法理解为什么需要接口,以及实现和继承之间有什么区别。
如果我想在我的程序中使用 Comparable 方法,(java.lang.Comparable)
为什么我不能让我的类继承自Comparable
?
public class Main {
public static void main(String[] args) {
class DocumentReader extends Comparable;
为什么 IntelliJ 说“这里没有接口”?
解决方案
松散地说,自 JDK 8 以来并不完全准确......但掌握基础知识还可以。
接口是实现该接口的类必须具有的方法规范。该接口不提供任何实现。因此,说你的类“实现了 Comparable”,它有义务提供一个带有特定签名的 compareTo 方法。
一个类可能包含实际的方法实现,也可能包含成员数据。扩展一个类本质上是该类的特化。你得到了基类所做的一切,你也许可以修改(通过覆盖基本方法)或扩充(通过添加新方法)。
除了有抽象方法之类的东西,基类不提供实现,因此迫使扩展类提供实现。
那么,从某种角度来看,您可以将接口视为一个抽象类,其中所有方法都是抽象的。这将是可行的,除了Java只允许一个类扩展一个类(没有'class X extends A,B'),但是一个类可以实现多个接口('class X implements A,B' - 我的语法可能不准确)。限制从多个类继承是有技术原因的,但我会在这里跳过。
正如我在一开始所说的那样,这在 JDK 8 中并不完全正确——接口中有“默认方法”,所以这条线有点模糊。
如果要以标准方式连接到其他对象,我会将接口视为对象必须提供的插头和插座类型的规范。您希望您的对象被“比较”,以便它们可以由其他组件按顺序排列?然后你必须实现 Comparable。
推荐阅读
- c# - 如何从这个 Web 应用共享凭证的后端调用这个 API?它们在不同的 Azure 环境中,但在同一个域中
- json - 在 React Native 中删除 SOAP XML 标头
- java - 只按一个键时执行按钮的 ActionListener
- scala - scala - foldLeft 用序列号填充连续的零间隙
- react-native - sudo npm install 时权限被拒绝
- javascript - 如何根据 req.query.params 过滤一个 json 对象
- matlab - 如何在 Simulink 中绘制非线性状态空间模型?
- html - 在 ngx-datatable 中显示溢出的内容
- c++ - 如何隐式转换模板化构造函数参数?
- android - 如何为谷歌地图上的视图创建阴影?