Java 面向对象:抽象类与接口

一、抽象类

abstract class Shape {
    abstract double area();   // 抽象方法,无实现
    void desc() { System.out.println("图形"); }  // 可含具体方法
}

不能实例化,子类必须实现所有抽象方法(除非子类也是抽象类)。用于”有部分公共实现 + 留扩展点”。

二、接口

interface Flyable {
    void fly();
    default void info() { System.out.println("会飞"); } // 默认方法
    static void ver() { System.out.println("v1"); }     // 静态方法
}

接口是纯契约,Java 8 后可有 default/static 方法。一个类可实现多个接口(多继承的替代)。

三、接口 vs 抽象类

维度 抽象类 接口
关系 is-a,单继承 can-do,多实现
成员 可有字段/具体方法 常量 + 抽象/默认/静态方法
用途 代码复用、模板 定义能力契约

经验:要复用代码用抽象类;要定义能力、解耦用接口。