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


当前回答

通常实现用于实现接口,扩展用于扩展基类行为或抽象类。

extends:派生类可以扩展基类。您可以重新定义已建立关系的行为。派生类“是”基类类型

implements:您正在实现合同。实现接口的类“具有”功能。

在java8版本中,接口可以在接口中具有默认方法,这在接口本身中提供了实现。

请参阅此问题以了解何时使用它们:

接口与抽象类(通用OO)

理解事物的榜样。

public class ExtendsAndImplementsDemo{
    public static void main(String args[]){

        Dog dog = new Dog("Tiger",16);
        Cat cat = new Cat("July",20);

        System.out.println("Dog:"+dog);
        System.out.println("Cat:"+cat);

        dog.remember();
        dog.protectOwner();
        Learn dl = dog;
        dl.learn();

        cat.remember();
        cat.protectOwner();

        Climb c = cat;
        c.climb();

        Man man = new Man("Ravindra",40);
        System.out.println(man);

        Climb cm = man;
        cm.climb();
        Think t = man;
        t.think();
        Learn l = man;
        l.learn();
        Apply a = man;
        a.apply();

    }
}

abstract class Animal{
    String name;
    int lifeExpentency;
    public Animal(String name,int lifeExpentency ){
        this.name = name;
        this.lifeExpentency=lifeExpentency;
    }
    public void remember(){
        System.out.println("Define your own remember");
    }
    public void protectOwner(){
        System.out.println("Define your own protectOwner");
    }

    public String toString(){
        return this.getClass().getSimpleName()+":"+name+":"+lifeExpentency;
    }
}
class Dog extends Animal implements Learn{

    public Dog(String name,int age){
        super(name,age);
    }
    public void remember(){
        System.out.println(this.getClass().getSimpleName()+" can remember for 5 minutes");
    }
    public void protectOwner(){
        System.out.println(this.getClass().getSimpleName()+ " will protect owner");
    }
    public void learn(){
        System.out.println(this.getClass().getSimpleName()+ " can learn:");
    }
}
class Cat extends Animal implements Climb {
    public Cat(String name,int age){
        super(name,age);
    }
    public void remember(){
        System.out.println(this.getClass().getSimpleName() + " can remember for 16 hours");
    }
    public void protectOwner(){
        System.out.println(this.getClass().getSimpleName()+ " won't protect owner");
    }
    public void climb(){
        System.out.println(this.getClass().getSimpleName()+ " can climb");
    }
}
interface Climb{
    public void climb();
}
interface Think {
    public void think();
}

interface Learn {
    public void learn();
}
interface Apply{
    public void apply();
}

class Man implements Think,Learn,Apply,Climb{
    String name;
    int age;

    public Man(String name,int age){
        this.name = name;
        this.age = age;
    }
    public void think(){
        System.out.println("I can think:"+this.getClass().getSimpleName());
    }
    public void learn(){
        System.out.println("I can learn:"+this.getClass().getSimpleName());
    }
    public void apply(){
        System.out.println("I can apply:"+this.getClass().getSimpleName());
    }
    public void climb(){
        System.out.println("I can climb:"+this.getClass().getSimpleName());
    }
    public String toString(){
        return "Man :"+name+":Age:"+age;
    }
}

输出:

Dog:Dog:Tiger:16
Cat:Cat:July:20
Dog can remember for 5 minutes
Dog will protect owner
Dog can learn:
Cat can remember for 16 hours
Cat won't protect owner
Cat can climb
Man :Ravindra:Age:40
I can climb:Man
I can think:Man
I can learn:Man
I can apply:Man

需要理解的要点:

狗和猫是动物,它们通过分享名字、生命来延长记忆和保护主人猫能爬,但狗不能。狗会思考,但猫不会。通过实施这些功能,这些特定功能被添加到猫和狗中。人不是动物,但他能思考、学习、应用、攀爬

通过这些示例,您可以理解

不相关的类可以通过接口具有功能,但相关的类通过基类的扩展重写行为。

其他回答

延伸

类只扩展一个类接口扩展了一个或多个接口

工具

类实现一个或多个接口接口“不能”实现任何内容

抽象类也像类一样,具有扩展和实现

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

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

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

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

类和接口都是契约。它们提供应用程序其他部分所依赖的方法和财产。

当您对本合同的实现细节不感兴趣时,可以定义一个接口。唯一需要关心的是契约(接口)是否存在。

在这种情况下,您可以让实现接口的类来关注合同如何履行的细节。只有类才能实现接口。

extends用于替换现有合同的详细信息。通过这种方式,您可以用不同的方式取代一种履行合同的方式。类可以扩展其他类,接口可以扩展其他接口。

这两个关键字与继承直接关联,这是OOP的核心概念。当我们将某个类继承到另一个类时,我们可以使用extends,但当我们要将某些接口继承到我们的类时,不能使用extends时,我们应该使用implements,并且我们可以使用扩展关键字从另一个接口继承接口。

如下图所示,一个类扩展另一个类,一个接口扩展了另一个接口,但一个类实现了一个接口。

有关详细信息