Implements vs extends:何时使用?有什么不同? | Java Debug 笔记

510 阅读2分钟

本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看活动链接


问题描述

请以易于理解的语言或一些相关文章的链接进行解释。


部分高赞回答

最高赞回答(779赞)

extends是一个用于扩展(extending)的类。 implements是一个用于实现(implementing)的接口。 接口和常规类之间的区别是,在接口中不能实现任何已声明的方法。只有“实现”接口的类才能实现这些方法。C++中与接口等价的是一个抽象类(虽然不是完全相同,但也差不多)。 Java也不支持类的多重继承。这通过使用多个接口来解决。

 public interface ExampleInterface {
    public void doAction();
    public String doThis(int number);
 }

 public class sub implements ExampleInterface {
     public void doAction() {
       //specify what must happen
     }

     public String doThis(int number) {
       //specfiy what must happen
     }
 }

现在扩展一个类

 public class SuperClass {
    public int getNb() {
         //specify what must happen
        return 1;
     }

     public int getNb2() {
         //specify what must happen
        return 2;
     }
 }

 public class SubClass extends SuperClass {
      //you can override the implementation
      @Override
      public int getNb2() {
        return 3;
     }
 }

在这种情况下

  Subclass s = new SubClass();
  s.getNb(); //returns 1
  s.getNb2(); //returns 3

  SuperClass sup = new SuperClass();
  sup.getNb(); //returns 1
  sup.getNb2(); //returns 2

另外,请注意,实现界面不需要@Override标签,因为未覆盖原始接口方法中的任何内容。我建议你对面向对象编程中的动态绑定,多态性和普遍继承进行更多研究。

第二高赞回答(82赞)

我注意到你的个人资料中有一些C++问题。如果您了解从C++的多继承的概念(参考从多个其他类继承特征的类),Java不允许此操作,但它确实有关键字interface,这是C++中的纯虚拟类。如很多人所述,您扩展(extend)了一个类(并且只能从一个延伸),并且您实现了一个接口。但是您的类可以在您喜欢时实现(implement)多个接口。

即这些关键字和管理它们使用的规则描绘了Java中多重继承的可能性(你只能拥有一个超级类,但你可以实现多个接口)。

本文翻译自Stack Overflow。关于翻译文章,聆风也相对生疏,难免有错漏,欢迎各位大佬在评论区批评指正,谢谢!