Appearance
2026-08-27 · 接口定义"能做什么"——Spring Boot 开发中接口是主角,抽象类了解即可。
Java 抽象与接口
1. 接口
接口是一组行为规范的定义,类通过 implements 实现接口:
java
// 定义接口
public interface Swimmable {
void swim(); // 接口里的方法默认 public abstract(不用写)
}
public interface Flyable {
void fly();
}
// 类实现接口
public class Duck extends Animal implements Swimmable, Flyable {
@Override
public void swim() {
System.out.println("鸭子在游泳");
}
@Override
public void fly() {
System.out.println("鸭子在飞");
}
}
// 使用
Duck duck = new Duck();
duck.swim(); // 鸭子在游泳
duck.fly(); // 鸭子在飞Java 支持多实现(一个类可以实现多个接口),这是解决单继承限制的方式。
接口的默认方法(Java 8+)
Java 8 开始,接口可以有默认方法(带方法体),不用强制子类实现:
java
public interface Swimmable {
void swim(); // 抽象方法(必须实现)
// 默认方法(可选实现)
default void float_() {
System.out.println("浮在水面上");
}
}2. final 关键字
final 表示"最终,不可修改":
java
// final 变量:值不能改(常量)
final int MAX = 100;
// MAX = 200; // ❌ 编译报错
// final 方法:不能被重写
public class Parent {
public final void show() {
System.out.println("不能被重写");
}
}
// final 类:不能被继承(比如 String、Math 都是 final 类)
public final class Utils {
// ...
}final 使用场景:
- 常量:
static final(全局常量) - 方法:不想被子类修改的方法
- 类:不想被继承的类
3. 抽象类——了解即可
用 abstract 修饰的类,不能直接创建对象,只能被子类继承。子类必须实现所有抽象方法:
java
public abstract class Shape {
String color;
public abstract double getArea(); // 抽象方法:只有声明,没有方法体
public void display() { // 普通方法:可以有方法体
System.out.println("颜色:" + color + ",面积:" + getArea());
}
}
public class Circle extends Shape {
double radius;
public Circle(double radius) { this.radius = radius; }
@Override
public double getArea() {
return Math.PI * radius * radius;
}
}接口 vs 抽象类:
| 区别 | 抽象类 | 接口 |
|---|---|---|
| 关键字 | abstract class | interface |
| 继承 | extends(单继承) | implements(多实现) |
| 构造方法 | 有(给子类用) | 没有 |
| 普通方法 | 可以有 | Java 8 前不能有 |
| 设计目的 | "是什么"(继承关系) | "能做什么"(能力) |
Spring Boot 开发中,接口用得比抽象类多(Service 接口 + ServiceImpl 实现类是标准写法)。抽象类只在确实有"共性代码 + 继承层次"时用,平时基本碰不到。