一、接口基础语法

接口使用interface关键字定义,类使用implements关键字实现接口。
// 定义接口
interface Play {
    // 抽象方法
    void game();
}

// 类实现接口
class Student implements Play {
    @Override
    public void game() {
        System.out.println("学生课余进行游戏");
    }
}
二、接口成员规则(Java7基础)

1. 接口中的变量默认是public static final常量,必须初始化赋值;

2. 接口中的抽象方法默认是public abstract,只能被public实现重写;

3. 接口不能实例化,没有构造方法。

三、核心优势:多实现

Java类只能单继承一个父类,但一个类可以同时implements多个接口,突破单继承限制:
interface Run {}
interface Swim {}

// 同时实现两个接口
class Person implements Run, Swim {
    @Override
    public void run() {}
    @Override
    public void swim() {}
}
四、接口之间可以多继承

接口和接口之间用extends,支持多继承:
interface A {}
interface B {}
interface C extends A,B {}
五、Java8接口新特性:默认方法、静态方法

1. 默认方法(default)

有默认方法体,实现类可以不重写;多个接口存在同名默认方法时,实现类必须手动重写消除冲突。
interface TestInterface {
    default void hello() {
        System.out.println("接口默认方法");
    }
}
2. 静态方法(static)

接口静态方法只能用接口名.静态方法()调用,不能用实现类对象调用。

六、接口多实现冲突解决方案

当一个类实现多个接口,多个接口存在同名方法:

1. 都是抽象方法:只需要重写一次即可;

2. 多个接口存在同名default默认方法:实现类必须强制重写该方法。

七、经典面试题:接口 vs 抽象类核心区别

1. 关键字:抽象类abstract class,接口interface;

2. 构造方法:抽象类有构造方法,接口无构造;

3. 继承/实现:类只能单继承抽象类;类可以多实现接口;

4. 成员变量:抽象类可以普通变量、常量;接口只能常量;

5. 设计思想:抽象类是「模板抽取」,描述一类事物共性;接口是「行为规范」,描述能力。

八、面向接口编程开发意义

程序依赖接口而非具体实现类,后续更换实现类不需要改动上层调用代码,极大降低耦合度,框架分层、插件化开发全部依托接口实现。
 

更多推荐