定义

接口(interface)是一种抽象类型,它定义了一组方法的签名,但没有提供这些方法的具体实现。通过实现接口,类可以获得某些特定的行为或能力,这种行为或能力是与类继承的特性不同的。所有实现接口的类都必须实现接口中声明的所有方法,否则这些类将被声明为抽象类。实现接口的类必须使用关键字“implements”来声明它们实现的接口,而一个类可以同时实现多个接口(与抽象类不同,一个子类只能有一个父类)

接口的定义通常使用interface关键字,如下所示:

public interface MyInterface {
    // 方法名
    void myMethod();
}

接口中的方法默认是public的,并且不能包含实例变量或实现方法

一个类可以有多个接口,但只能有一个父类:

public class A extends E implements B,C,D{
    ...
}

接口不能被直接实例化:

public interface Person{
    public abstract int personNum(Object p);
}

Person p = new Person(); //not valid

Person p;
Student s = new Student();
p = s; //valid

2、作用

接口的主要作用是实现多态性和代码重用。它允许您定义一组方法,然后在多个类中使用这些方法,而无需为每个类重新编写相同的代码。通过使用接口,您可以将代码与实现分离,并且可以在不修改实现的情况下更改代码。

3、使用

要实现一个接口,类必须使用implements关键字实现接口,然后提供接口中声明的所有方法的具体实现。下面是一个简单的示例:

public interface MyInterface {
    void myMethod();
}

public class MyClass implements MyInterface {
    @Override
    public void myMethod() {
        System.out.println("MyClass.myMethod() called.");
    }
}

在这个示例中,MyClass实现了MyInterface接口,并提供了myMethod()方法的具体实现。您可以通过创建MyClass的实例来使用myMethod()方法

MyClass myClass = new MyClass();
myClass.myMethod(); // 输出 "MyClass.myMethod() called."

接口还可以扩展其他接口,这意味着子接口继承了父接口的所有方法,以及父接口中声明的所有常量。例如:

public interface MyParentInterface {
    void parentMethod();
}

public interface MyChildInterface extends MyParentInterface {
    void childMethod();
}

在这个示例中,MyChildInterface继承了MyParentInterface的parentMethod()方法,并且还声明了自己的childMethod()方法。任何实现MyChildInterface接口的类都必须提供这两个方法的具体实现。

4. 接口与抽象类

  1. 抽象类可以包含具体实现的方法和抽象方法,而接口只能有抽象方法或没有方法体的方法。
  2. 一个类只能继承一个抽象类,但可以实现多个接口