Skip to content

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 classinterface
继承extends(单继承)implements(多实现)
构造方法有(给子类用)没有
普通方法可以有Java 8 前不能有
设计目的"是什么"(继承关系)"能做什么"(能力)

Spring Boot 开发中,接口用得比抽象类多(Service 接口 + ServiceImpl 实现类是标准写法)。抽象类只在确实有"共性代码 + 继承层次"时用,平时基本碰不到。