在 Java 中,extends
用于扩展类,implements
用于实现接口。 这是扩展与工具之间的主要区别。
1. extends
关键字
在 Java 中,我们可以通过使用extend
关键字对其进行扩展来继承类的字段和方法。 请注意,在 Java 中,一个类最多只能扩展一个类。
以ArrayList
类为例。 它扩展了AbstractList
类,又扩展了AbstractCollection
类。
因此,基本上ArrayList
类具有其父类AbstractList
和AbstractCollection
的方法和行为。
AbstractCollection
提供了诸如contains(Object o)
,toArray()
,remove(Object o)
等方法。而AbstractList
类提供了add()
,indexOf()
,lastIndexOf()
,clear()
等。同样一些方法被ArrayList
覆盖。
public class ArrayList<E> extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable
{
//code
}
Java 扩展示例
让我们从头开始创建一些东西,以更好地了解使用extends
关键字的 Java 继承的工作方式。 我创建了两个类 – ParentClass
和ChildClass
,其中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 个接口,即List
,RandomAccess
,Cloneable
和Serializable
。 它已经在给定的接口中实现了所有方法。
Java 实现示例
与前面的示例类似,让我们创建一些基本的知识来了解接口实现的外观。 我创建了两个接口Movable
和Swimmable
。 两个接口都定义一种方法。
类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 中extends
和implements
关键字之间的区别。
extends
关键字用于继承类;implements
关键字用于继承接口。- 一类只能扩展一个类。 但可以实现任意数量的接口。
- 扩展超类的子类可能会覆盖超类中的某些方法。 一个类必须实现接口中的所有方法。
学习愉快!