接口

SOBER大约 3 分钟

接口

基本介绍

接口就是给出一些没有实现的方法,封装到一起,到某个类要使用的时候,在根据具体情况把这些方法写出来

语法

interface 接口名 {
    属性
    方法(1.抽象方法,2.默认实现方法,3.静态方法)
}

class 类名 implements 接口 {
    自己属性
    自己方法
    必须实现的接口的抽象方法
}

注意

Jdk7.0前 接口里的所有方法都没有方法体,即都是抽象方法

Jdk8.0后接口类可以有静态方法,默认方法,也就是说接口中可以有方法的具体实现

演示

public interface Interface01 {
    public int n1 = 10;
    // 在接口中 抽象方法可以省略 abstract 关键字
    public void h1();
    //  在jdk8 后,可以有默认的实现方法,需要使用 default 关键字
    default public void ok(){
        System.out.println("ok.....");
    }
    // 在 jdk8 后,可以有静态方法
    // public void cry(){ 方法体 }
}

public class Interface02 {
    public static void main(String[] args) {}
}
/**
 * 1. implements 实现接口关键字
 * 2.一个类实现接口,要将该接口的所有抽象方法都实现
 * */
class L implements Interface01 {
    @Override
    public void h1() {
        System.out.println("........");
    }
}

使用场景

  1. 现在要制造战斗机,武装直升机,专家只需把飞机需要的功能/规格定下来即可,然后让别的人具体实现就可。
  2. 一个项目经理,管理三个程序员,功能开发一个软,为了控制和管理软件,项目经理可以定义一些接口,然后由程序员具体实现。
// Interface03DB 项目经理(接口)
public interface Interface03DB {
    public void  connect(); // 连接方法
    public void close(); // 关闭连接
}

// A 程序员实现接口的方法
public class Interface03Mysql implements Interface03DB {
    @Override
    public void close() {
        System.out.println("关闭连接DB");
    }

    @Override
    public void connect() {
        System.out.println("开始连接DB");
    }
}

// B 程序员实现接口的方法
public class Interface03Org implements Interface03DB {
    @Override
    public void close() {
        System.out.println("关闭连接Org");
    }

    @Override
    public void connect() {
        System.out.println("开始连接Org");
    }
}

// 执行方法
public class InterFace03 {
    public static void main(String[] args) {
        Interface03Org interface03Org = new Interface03Org();
        Interface03Mysql interface03Mysql = new Interface03Mysql();
        t(interface03Org);
        t(interface03Mysql);
    }
    public static void t(Interface03DB db){
        db.connect();
        db.close();
    }
}

注意

  1. 接口不能被实例化

  2. 接口中所有的方法是 public 方法,接口中抽象方法,可以不用 abstract 修饰

  3. 一个普通类实现接口,就必须将该接口的所有方法都实现

  4. 抽象类实现接口,可以不用实现接口的方法

  5. 一个类同时可以实现多个接口

    class Pig implements AA, BB, CC {}
    
  6. 接口中的属性,只能是 final 的,而且是 public static final 修饰符。

    比如: int a=1; 实际上是 public static final int a=1; (必须初始化)

  7. 接口中属性的访问语句: 接口名 . 属性名

  8. 一个接口不能继承其它的类,但是可以继承多个其他接口 [举例]

    interface IB {}
    interface IC {}
    interface IQ extends IB, IC {}
    
  9. 接口的修饰符 只能是 public 和默认,这点和类的修饰符是一样的

    public interface IB {}
    

接口 和 继承类

解决问题不同

  • 继承: 解决代码的复用性和可维护性
  • 接口: 设计,设计好各种规范(方法),让其它类去实现这些方法

接口比继承更加灵活

继承是满足 is - a 的关系,而接口只需满足 like - a 的关系

接口在一定程度上实现代码解耦

接口的多态特性

  1. 多态参数
  2. 多态数组
  3. 接口存在多态传递现象