⚡ 编程实验室🏗️ HTML🎨 CSS⚡ JavaScript🐍 Python🗄️ SQL☕ Java⚛️ React💚 Vue🟢 Node.js⚙️ C语言🐘 PHP🐹 Go🔷 TypeScript🐬 MySQL🔧 C++🎯 C#🦀 Rust🅱️ Bootstrap💡 jQuery🎸 Django🍃 MongoDB👗 Sass🎪 Kotlin📊 R语言📋 XML📊 Excel🐘 PostgreSQL🐳 Docker🅰️ Angular🎮 游戏🏠 网站首页

Java 密封类:受限的类层次结构

理解密封类如何精确控制哪些类或接口可以继承或实现它,增强领域建模的安全性。 · 难度:入门 · +15XP

为什么需要密封类?

在大型系统中,不受限制的继承可能导致类层次混乱。密封类(Java 17 正式版)允许你声明一个类只能被指定的子类扩展,从而保证模式匹配的穷举性。

基本语法

public sealed class Shape permits Circle, Rectangle, Triangle {
}

final class Circle extends Shape {} final class Rectangle extends Shape {} non-sealed class Triangle extends Shape {}

子类必须使用 finalsealednon-sealed 修饰符。permits 列表中的类必须与密封类在同一模块或包中(Java 17 放宽了限制)。

在 switch 中使用

double area = switch (shape) {
    case Circle c    -> Math.PI * c.radius() * c.radius();
    case Rectangle r -> r.width() * r.height();
    case Triangle t  -> 0.5 * t.base() * t.height();
};

由于 Shape 是密封的,编译器知道所有子类型,无需 default 分支。

密封接口

public sealed interface Vehicle permits Car, Bike {
    void drive();
}

final class Car implements Vehicle { ... } final class Bike implements Vehicle { ... }

练习提示

在 starter_code 中,定义一个密封类 Animal,允许 Cat 和 Dog 两个子类,并在 main 中创建实例。

Ctrl+Enter
🚀 升级VIP
解锁全部课程+AI助手

🏆 学习排行

加载中...

📊 统计

📖 133 篇
0 完成
🔥 0