Java 9 引入了密封类(Sealed Classes),旨在提供更严格的类型安全和更好的代码封装性。
# Java 密封类
## 概述
密封类是一种新的类类型,它允许限制继承它的类必须在同一个包中,或者必须是指定的某些类。这有助于限制类的使用,提高代码的安全性和可维护性。
## 语法
要声明一个密封类,可以使用 `sealed` 关键字:
sealed class Shape permits Circle, Square, Rectangle {}
在这个例子中,`Shape` 是一个密封类,它只允许 `Circle`、`Square` 和 `Rectangle` 三个类继承。
## 特点
- **包限制**:密封类可以限制继承它的类必须在同一个包中。
- **继承限制**:密封类可以指定继承它的类必须是特定的几个类。
- **非密封子类**:密封类可以有非密封的子类,但这些子类不能被其他类继承。
## 使用场景
- 当你想要限制类的继承结构时。
- 当你想要确保类的实现是封闭的,防止未来被错误的扩展。
## 例子
package shapes;
sealed class Shape permits Circle, Square, Rectangle {}
final class Circle extends Shape {
void draw() {
System.out.println("Drawing a circle");
}
}
class Square extends Shape {
void draw() {
System.out.println("Drawing a square");
}
}
class Rectangle extends Shape {
void draw() {
System.out.println("Drawing a rectangle");
}
}
在这个例子中,`Shape` 类被密封,并且只有 `Circle`、`Square` 和 `Rectangle` 可以继承它。
## 注意事项
- 密封类不能是 `public`,因为如果它是 `public`,则任何包都可以访问并继承它。
- 密封类和它的子类必须在同一个包中,或者子类必须被明确地用 `permits` 子句列出。
- 密封类可以提高代码的封装性,但也限制了类的使用灵活性。
© 著作权归作者所有
本文由 趣代码Blog 创作,采用 知识共享署名4.0 国际许可协议进行许可,本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名。