原文: https://howtodoinjava.com/oops/extends-vs-implements/

在 Java 中,extends用于扩展类,implements用于实现接口。 这是扩展与工具之间的主要区别

1. extends关键字

在 Java 中,我们可以通过使用extend关键字对其进行扩展来继承类的字段和方法。 请注意,在 Java 中,一个类最多只能扩展一个类。

ArrayList类为例。 它扩展了AbstractList类,又扩展了AbstractCollection类。

因此,基本上ArrayList类具有其父类AbstractListAbstractCollection的方法和行为。

AbstractCollection提供了诸如contains(Object o)toArray()remove(Object o)等方法。而AbstractList类提供了add()indexOf()lastIndexOf()clear()等。同样一些方法被ArrayList覆盖。

  1. public class ArrayList<E> extends AbstractList<E>
  2. implements List<E>, RandomAccess, Cloneable, java.io.Serializable
  3. {
  4. //code
  5. }

Java 扩展示例

让我们从头开始创建一些东西,以更好地了解使用extends关键字的 Java 继承的工作方式。 我创建了两个类 – ParentClassChildClass,其中ChildClass扩展ParentClass

public class ParentClass {

    public int dataVal = 100;

    public int getDataVal() {
        return this.dataVal;
    }
}
public class ChildClass extends ParentClass 
{

}

我没有向ChildClass添加任何字段或方法,只是为了表明即使我们不对其添加任何内容,它仍然具有其父类的行为。

public class Main 
{
    public static void main(String[] args) 
    {
        ChildClass child = new ChildClass();

        System.out.println( child.dataVal );
        System.out.println( child.getDataVal() );
    }
}

程序输出。

100
100

2. implements关键字

接口是在 Java 中强制执行契约的方法。 它们强制实现类提供某种行为。 要实现接口,类必须使用实现关键字

在 Java 中,我们可以实现多个接口。 在这种情况下,类必须实现所有接口的所有方法。 (或将其声明为抽象)。

再看一次ArrayList类声明。 它实现了 4 个接口,即ListRandomAccessCloneableSerializable。 它已经在给定的接口中实现了所有方法。

Java 实现示例

与前面的示例类似,让我们创建一些基本的知识来了解接口实现的外观。 我创建了两个接口MovableSwimmable。 两个接口都定义一种方法。

Human实现两个接口,因此它必须实现在两个接口中定义的方法。

public interface Movable {

    public void move();
}
public interface Swimmable
{
    public void swim();
}
public class Human implements Movable, Swimmable 
{
    @Override
    public void swim() {
        System.out.println("I am swimming");
    }

    @Override
    public void move() {
        System.out.println("I am moving");
    }
}

现在,我们将测试Human类及其强制行为。

public class Main 
{
    public static void main(String[] args) 
    {
        Human obj = new Human();

        obj.move();
        obj.swim();
    }
}

程序输出:

I am moving
I am swimming

显然,Human类实现了两个接口并定义了它们的行为。 这就是 Java 接口的全部目的。

3. 扩展与实现之间的差异

根据上述示例,让我们列出 Java 中extendsimplements关键字之间的区别

  1. extends关键字用于继承类; implements关键字用于继承接口。
  2. 一类只能扩展一个类。 但可以实现任意数量的接口。
  3. 扩展超类的子类可能会覆盖超类中的某些方法。 一个类必须实现接口中的所有方法。

学习愉快!