请用通俗易懂的语言或文章链接进行解释。


当前回答

扩展:用于将父类的属性获取到子类中,并且可能包含已定义的方法,这些方法可以在子类中重写。

Implements:这用于通过在子类中定义接口来实现接口(仅具有函数签名而不具有函数定义的父类)。

有一个特殊的条件:“如果我希望一个新接口成为现有接口的子接口怎么办?”。在上述条件下,子接口扩展父接口。

其他回答

extends用于扩展类。

implements用于实现接口

接口和常规类之间的区别在于,在接口中不能实现任何声明的方法。只有“实现”接口的类才能实现方法。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标记,因为原始接口方法中没有任何内容需要重写

我建议您对面向对象编程中的动态绑定、多态性和一般继承进行更多研究

在Java语言中创建自己的新类时使用这两个关键字。

区别:implements意味着您在类中使用Java接口的元素。extends表示您正在创建正在扩展的基类的子类。您只能在子类中扩展一个类,但可以实现任意数量的接口。

有关详细信息,请参阅界面上的oracle文档页面。

这有助于澄清什么是接口,以及使用它们的约定。

只有当子类想要使用SuperClass中已经声明的某些功能(方法或实例变量),或者我想要稍微修改SuperClass的功能(方法重写)时,我们才使用SubClass扩展SuperClass。但是,比方说,我有一个Animal类(SuperClass)和一个Dog类(SubClass),我在Animal中定义的方法很少,例如doEat(),doSleep()。。。以及更多。

现在,我的狗类可以简单地扩展Animal类,如果我希望我的狗使用Animal中声明的任何方法,我可以通过创建一个狗对象来调用这些方法。这样我就可以保证我有一只能吃能睡的狗,可以做我想让狗做的任何事情。

现在,想象一下,有一天,一个爱猫的人来到我们的工作场所,她试图扩展动物课程(猫也吃也睡)。她创建了一个Cat对象并开始调用这些方法。

但是,比方说,有人试图成为Animal类的对象。你可以分辨猫是如何睡觉的,你可以分辨狗是如何进食的,你也可以分辨大象是如何喝水的。但它在制作Animal类的对象时没有任何意义。因为这是一个模板,我们不想要任何一般的饮食方式。

因此,我更倾向于创建一个抽象类,没有人可以实例化,但可以用作其他类的模板。

总之,Interface只是一个抽象类(纯抽象类),它不包含方法实现,只包含定义(模板)。因此,实现接口的人只知道他们有doEat()的模板;和doSleep();但他们必须定义自己的doEat();和doSleep();方法。

只有当您想要重用SuperClass的某些部分时(但请记住,您始终可以根据需要重写SuperClass的方法),才可以进行扩展,并且当您需要模板并且希望自己定义模板时(根据需要),才可实现。

我将与您分享一段代码:您可以尝试使用不同的输入集并查看结果。

class AnimalClass {

public void doEat() {
    
    System.out.println("Animal Eating...");
}

public void sleep() {
    
    System.out.println("Animal Sleeping...");
}

}

public class Dog extends AnimalClass implements AnimalInterface, Herbi{

public static void main(String[] args) {
    
    AnimalInterface a = new Dog();
    Dog obj = new Dog();
    obj.doEat();
    a.eating();
    
    obj.eating();
    obj.herbiEating();
}

public void doEat() {
    System.out.println("Dog eating...");
}

@Override
public void eating() {
    
    System.out.println("Eating through an interface...");
    // TODO Auto-generated method stub
    
}

@Override
public void herbiEating() {
    
    System.out.println("Herbi eating through an interface...");
    // TODO Auto-generated method stub
    
}


}

定义的接口:

public interface AnimalInterface {

public void eating();

}


interface Herbi {

public void herbiEating();

}

最简单的说法是,extends用于从类继承,implements用于在类中应用接口

延伸:

public class Bicycle {
    //properties and methods
}
public class MountainBike extends Bicycle {
    //new properties and methods
}

机具:

public interface Relatable {
    //stuff you want to put
}
public class RectanglePlus implements Relatable {
    //your class code
}

如果您仍然感到困惑,请阅读以下内容:https://docs.oracle.com/javase/tutorial/java/IandI/subclasses.htmlhttps://docs.oracle.com/javase/tutorial/java/IandI/usinginterface.html

我注意到你的个人资料中有一些C++问题。如果您理解C++的多重继承(指从多个其他类继承特性的类)的概念,Java不允许这样做,但它确实有关键字接口,这有点像C++中的纯虚拟类。正如很多人所提到的,你扩展了一个类(而且你只能从一个类扩展),你实现了一个接口——但是你的类可以实现任意多的接口。

也就是说,这些关键字及其使用规则描述了Java中多重继承的可能性(只能有一个超级类,但可以实现多个接口)。