特性 类(Class) 接口(Interface)
实例化 可以 new 创建对象 ❌ 不能直接实例化
继承 单继承(extends 1个类) 多实现(implements 多个接口)
构造方法 ❌ 没有
字段 任意类型成员变量 只能是 public static final 常量
方法 任意方法(具体/抽象) 可有抽象方法、default 方法、static 方法
访问修饰符 任意 方法默认 public
多态 通过继承实现 通过实现/继承实现,支持多类型

1. 类(Class)— 描述"是什么"


public class Dog {

private String name; // 可以有各种访问级别的字段

public Dog(String name) { // 有构造方法

this.name = name;

}

public void bark() { // 具体方法

System.out.println("汪汪!");

}

}

  • 单继承:只能 extends 一个父类
  • 可以有状态(成员变量)和行为(方法)
  • 运行时实体,可以 new Dog("旺财")

2. 接口(Interface)— 描述"能做什么"


public interface Flyable {

void fly(); // 抽象方法(默认 public abstract)

default void glide() { // default 方法(Java 8+)

System.out.println("滑翔中...");

}

static void info() { // static 方法(Java 8+)

System.out.println("Flyable 接口");

}

}

  • 多实现:一个类可同时实现多个接口

public class Bird extends Animal implements Flyable, Swimmable {

@Override

public void fly() { ... }

@Override

public void swim() { ... }

}

3. 关键设计哲学


类 → IS-A 关系(Bird IS-A Animal)

接口 → CAN-DO 关系(Bird CAN-DO Flyable)

  • 定义的是身份(我是什么)
  • 接口定义的是能力(我能做什么)

4. Java 8 之后接口的进化


public interface Vehicle {

void start(); // 抽象方法

default void horn() { // default 方法(可有方法体)

System.out.println("嘀嘀");

}

static int maxSpeed() { // static 方法

return 200;

}

int MAX_WEIGHT = 1000; // 隐含 public static final

}

Java 9 还引入了 private 方法,供 default 方法内部复用。

5. 什么时候用哪个?

场景 选择
需要有构造函数、状态字段
需要定义一组规范/契约 接口
需要多重继承的能力 接口
需要代码复用(工具方法) 抽象类
事件监听、回调 接口(如 OnClickListener

更多推荐