目录

接口

什么是接口?

如何使用接口


接口

什么是接口?

        接口是由抽象类衍生出来的一个概念,并由此产生了一种编程方式:面向接口编程。

        面向接口编程就是将程序中的业务模块进行分离,以接口的形式去对接不同的业务模块。

        面向接口编程的优点:当用户需求变更时,只需要切换不同的实现类,而不需要修改串联模块的接口,减少对系统的影响。

                1、能够最大限度实现解耦合,降低程序的耦合性。

                2、使程序易于扩展。

                3、有利于程序的后期维护。

如何使用接口

        接口在 Java 中时独立存在的一种结构,和类相似,我们需要创建一个接口文件,Java 中用 class 关键字来标识类,用 interface 来标识接口,基本语法:

public interface 接口名{
    public 返回值 方法名(参数列表)
}

        接口其实就是一个抽象类,极度抽象的抽象类。

        抽象类:一个类中一旦存在没有具体实现的抽象方法时,那么该类就必须定义为抽象类,同时抽象类允许存在非抽象方法。

        但是接口完全不同,接口中不能存在非抽象方法,接口中必须全部是抽象方法

        因为接口中必须全部都是抽象方法,所以修饰抽象方法的关键字 abstract 可以省略。

        接口中允许定义成员变量,但是有如下要求:

                1、不能定义 private 和 protected 修饰的成员变量,只能定义 public 和默认访问权限修饰符修饰的成员变量。

                2、接口中的成员变量在定义时就必须完成初始化。

                3、接口中的成员变量都是静态常量,既可以直接通过接口访问,同时值不能被修改。

public interface MyInterface {
    public int ID = 0;
    String NAME = "张三";
    public void test();
}

        使用接口时,不能直接实例化接口对象,必须实例化其实现类对象,实现类本身就是一个普通的 Java 类,创建实现类的代码如下所示。

public class MyInterfaceImpl implements MyInterface {

    @Override
    public void test() {
        // TODO Auto-generated method stub
        
    }
}

implements 关键字来指定实现类具体要实现的接口,在实现类的内部需要对接口的所有抽象方法进行实现,同时要求访问权限修饰符、返回值类型、方法名和参数列表必须完全一致。

Java 只支持单继承,但是接口可以多实现(一个实现类可以同时实现多个接口)

public interface MyInterface {
    public int ID = 0;
    String NAME = "张三";
    public void fly();
}
public interface MyInterface2 {
    public void run();
}
public class MyInterfaceImpl implements MyInterface,MyInterface2 {

    @Override
    public void run() {
        // TODO Auto-generated method stub
        System.out.println("实现了跑步的方法");
    }

    @Override
    public void fly() {
        // TODO Auto-generated method stub
        System.out.println("实现了飞行的方法");
    }

}
import java.util.ArrayList;
import java.util.List;

public class Test {
    public static void main(String[] args) {
        MyInterfaceImpl myInterfaceImpl = new MyInterfaceImpl();
        myInterfaceImpl.fly();
        myInterfaceImpl.run();
    }
}