🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# Java `extends`与`implements`关键字 > 原文: [https://howtodoinjava.com/oops/extends-vs-implements/](https://howtodoinjava.com/oops/extends-vs-implements/) 在 Java 中,`extends`用于扩展类,`implements`用于实现接口。 这是扩展与工具之间的主要**区别**。 ## 1\. `extends`关键字 在 Java 中,我们可以通过使用`extend`关键字对其进行扩展来继承类的字段和方法。 请注意,在 Java 中,一个类最多只能扩展一个类。 以[`ArrayList`](https://howtodoinjava.com/java-arraylist/)类为例。 它扩展了`AbstractList`类,又扩展了`AbstractCollection`类。 因此,基本上`ArrayList`类具有其父类`AbstractList`和`AbstractCollection`的方法和行为。 `AbstractCollection`提供了诸如`contains(Object o)`,`toArray()`,`remove(Object o)`等方法。而`AbstractList`类提供了`add()`,`indexOf()`,`lastIndexOf()`,`clear()`等。同样一些方法被`ArrayList`覆盖。 ```java public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable { //code } ``` #### Java 扩展示例 让我们从头开始创建一些东西,以更好地了解使用`extends`关键字的 Java 继承的工作方式。 我创建了两个类 – `ParentClass`和`ChildClass`,其中`ChildClass`扩展`ParentClass`。 ```java public class ParentClass { public int dataVal = 100; public int getDataVal() { return this.dataVal; } } ``` ```java public class ChildClass extends ParentClass { } ``` 我没有向`ChildClass`添加任何字段或方法,只是为了表明即使我们不对其添加任何内容,它仍然具有其父类的行为。 ```java public class Main { public static void main(String[] args) { ChildClass child = new ChildClass(); System.out.println( child.dataVal ); System.out.println( child.getDataVal() ); } } ``` 程序输出。 ```java 100 100 ``` ## 2\. `implements`关键字 接口是在 Java 中强制执行契约的方法。 它们强制实现类提供某种行为。 要实现接口,类必须使用**实现关键字**。 在 Java 中,我们可以实现多个接口。 在这种情况下,类必须实现所有接口的所有方法。 (或将其声明为[抽象](https://howtodoinjava.com/java/basics/abstract-keyword/))。 再看一次`ArrayList`类声明。 它实现了 4 个接口,即`List`,`RandomAccess`,`Cloneable`和[`Serializable`](https://howtodoinjava.com/java/serialization/externalizable-vs-serializable/)。 它已经在给定的接口中实现了所有方法。 #### Java 实现示例 与前面的示例类似,让我们创建一些基本的知识来了解接口实现的外观。 我创建了两个接口`Movable`和`Swimmable`。 两个接口都定义一种方法。 类`Human`实现两个接口,因此它必须实现在两个接口中定义的方法。 ```java public interface Movable { public void move(); } ``` ```java public interface Swimmable { public void swim(); } ``` ```java 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`类及其强制行为。 ```java public class Main { public static void main(String[] args) { Human obj = new Human(); obj.move(); obj.swim(); } } ``` 程序输出: ```java I am moving I am swimming ``` 显然,`Human`类实现了两个接口并定义了它们的行为。 这就是 Java 接口的全部目的。 ## 3\. 扩展与实现之间的差异 根据上述示例,让我们列出 Java 中`extends`和`implements`关键字之间的**区别**。 1. `extends`关键字用于继承类; `implements`关键字用于继承接口。 2. 一类只能扩展一个类。 但可以实现任意数量的接口。 3. 扩展超类的子类可能会覆盖超类中的某些方法。 一个类必须实现接口中的所有方法。 学习愉快!