源本科技 | 码上会

Java 类与接口

2026/01/22
60
0

学习目标

  • 理解 Java 中 类(Class)接口(Interface) 的基本定义和用途

  • 掌握类与接口在语法、继承机制、成员特性等方面的 核心区别

  • 能够根据实际开发需求,合理选择使用类或接口

  • 熟悉接口自 Java 8 起引入的新特性(如默认方法、静态方法)


什么是类

在 Java 中,类是创建对象的蓝图。它封装了对象的 属性 行为

class Student {
    // 实例变量(表示对象的状态)
    int id;
    String name;

    public static void main(String[] args) {
        // 创建 Student 对象
        Student s1 = new Student();
        System.out.println(s1.id);    // 输出:0(int 默认值)
        System.out.println(s1.name);  // 输出:null(引用类型默认值)
    }
}

说明:该示例展示了类如何保存状态,并通过对象访问其字段。未显式初始化的字段会使用 Java 的默认值。


什么是接口

接口是类的契约,它定义了一组方法签名(即“能做什么”),但不提供具体实现(Java 8 之前)。从 Java 8 开始,接口可以包含 默认方法 静态方法

// 声明接口
interface TestInterface {
    // 所有变量自动为 public static final
    int A = 10;

    // 抽象方法(自动为 public abstract)
    void display();
}

// 类实现接口
class TestClass implements TestInterface {
    // 必须提供抽象方法的具体实现
    public void display() {
        System.out.println("Coder");
    }
}

class MainApp {
    public static void main(String[] args) {
        TestClass obj = new TestClass();
        obj.display();      // 输出:Coder
        System.out.println(obj.A);  // 输出:10
    }
}

说明:接口中的常量可被实现类直接使用,而抽象方法必须由实现类重写。
这体现了“接口定义能力,类提供实现”的设计思想。


类与接口区别

下表总结了 Java 中类与接口的主要差异:

特性

类(Class)

接口(Interface)

关键字

使用 class 定义

使用 interface 定义

实例化

可以通过 new 创建对象

不能直接实例化,需由类实现

继承方式

使用 extends 继承另一个类

类使用 implements 实现接口;接口使用 extends 继承其他接口

多重继承

不支持(Java 不允许多个父类)

支持(一个类可实现多个接口)

构造器

可包含构造方法

不能包含构造器

方法类型

可包含具体方法、抽象方法(若为抽象类)

Java 8 前:仅抽象方法
Java 8+:可含 defaultstatic 方法

访问修饰符

成员可使用 publicprivateprotected、包级私有

所有成员隐式为 public

变量特性

变量可为任意类型(静态 / 非静态、final/ 非 final)

所有变量隐式为 public static final(即常量)

设计目的

封装数据与行为,用于创建具有状态的对象

定义行为契约,强调“能做什么”,而非“如何做”


何时使用

  • 使用类:当你需要创建具有内部状态具体行为的对象时。

  • 使用接口

    • 定义多个不相关类应遵循的通用行为规范

    • 实现多态性解耦设计

    • 在不破坏现有代码的前提下,为系统添加新功能(通过新增实现类)

最佳实践:优先面向接口编程,这有助于提高代码的灵活性和可维护性。


重点总结

  • 类是对象的模板,包含状态和行为;接口是能力的契约,只关注方法签名。

  • 类支持单继承,接口支持多继承(通过实现多个接口)。

  • 接口中的所有变量都是常量,所有方法在 Java 8 前必须是抽象的。

  • 自 Java 8 起,接口可通过 default 方法提供默认实现,增强向后兼容性。

  • 接口不能有构造器,也不能被实例化。


思考题

  1. 为什么 Java 不允许类进行多重继承,却允许一个类实现多个接口?这种设计解决了什么问题?

  2. 假设你正在开发一个图形绘制系统,需要支持 Circle、Rectangle 和 Triangle 的绘制。你会如何使用接口来设计这个系统?请写出接口和其中一个实现类的代码框架。

  3. 如果一个接口中定义了一个 default 方法,而两个父接口都提供了同名的 default 方法,子类该如何处理?(提示:编译冲突与显式覆盖)