一 简介
接口 = 一套纯规则 / 纯规范
只规定「能做什么」,不规定
就像说明书:规定手机能打电话、能上网,但不写内部怎么实现
接口的本质:行为的抽象。
二、接口的基本语法(Java 8+)
java
运行
// 定义接口
public interface 接口名 {
// 常量(默认 public static final,可省略)
int MAX_NUM = 100;
// 抽象方法(默认 public abstract,可省略)
void method1();// 默认方法(Java 8+,有实现)
default void defaultMethod() {// 方法体
}// 静态方法(Java 8+)
static void staticMethod() {// 方法体
}// 私有方法(Java 9+,供内部默认方法调用)
private void privateMethod() {// 方法体
}
}
三、接口的核心特点
接口不能实例化(不能 new 接口)
类可以实现多个接口(Java 唯一支持「多继承」的方式)
接口里的变量默认是 public static final 常量
接口里的普通方法默认是 public abstract 抽象方法
一个类实现接口,必须重写所有抽象方法(除非是抽象类)
接口可以继承多个接口
四、最常用场景:类实现接口
示例:定义一个「跑步」接口
java
运行
// 接口:规定能跑
public interface Run {
void run(); // 抽象方法
}
类实现接口
java
运行
// 人类实现 Run 接口
public class Person implements Run {
@Override
public void run() {
System.out.println("人用双腿跑步");
}
}
// 汽车也实现 Run 接口
public class Car implements Run {
@Override
public void run() {
System.out.println("汽车用轮子跑");
}
}
多态使用(接口最强大的地方)
java
运行
public class Test {
public static void main(String[] args) {
Run r1 = new Person();
Run r2 = new Car();
r1.run();r2.run();
}
}
输出:
plaintext
人用双腿跑步
汽车用轮子跑
五、Java 8+ 接口新特性(非常重要)
-
默认方法(default)
有方法体
实现类可以不重写,直接用
用于给接口扩展功能,不破坏原有代码
java
运行
public interface Swim {
void swim();default void breathe() {
System.out.println("在水里呼吸");
}
} -
静态方法(static)
属于接口本身
用 接口名.方法名() 调用
实现类不能继承
java
运行
static void help() {
System.out.println("游泳帮助");
}
// 调用
Swim.help();
3. 私有方法(private,Java 9+)
供接口内部默认方法 / 静态方法复用
外部无法访问
六、接口 vs 抽象类
表格
特性 接口(interface) 抽象类(abstract class)
继承 支持多实现 只能单继承
方法 Java8+:抽象、默认、静态、私有 抽象、普通、静态、私有
变量 只能是常量 普通成员变量、常量都可以
构造器 没有 有构造器
核心用途 定义行为规范 模板设计、代码复用
一句话区分:
接口:能干什么
抽象类:是什么 + 一部分功能
七、接口的实际用途(开发中为什么要用?)
统一规范:所有实现类必须遵守同一套方法
解耦代码:面向接口编程,不依赖具体实现
多实现:弥补 Java 单继承的不足
框架核心:Spring、MyBatis、SpringBoot 全是面向接口
多态:让代码更灵活、可扩展
八、快速总结(背会就能用)
接口是规范,不是类
用 implements 实现,可多实现
抽象方法必须重写
默认方法可直接用
静态方法属于接口本身
面向接口编程 = 高内聚、低耦合
