📜  密封接口 java codegrepper - Java (1)

📅  最后修改于: 2023-12-03 15:39:08.971000             🧑  作者: Mango

密封接口 Java Codegrepper - Java

在Java 15中,密封接口成为了新的功能,这使得类能够限制其他模块在其继承层次结构上的扩展。对于那些需要使用继承的类,如框架/库/工具包,密封接口通常是很有用的。

密封接口的定义

密封接口是一个接口,它可以声明它的实现者,这进一步限制了实现者的数量。有了密封接口,类不能简单地给自己添加子类,而是必须在密封接口声明的子集中进行。

【代码示例】

public sealed interface Animal
  permits Dog, Cat {
  void makeSound();
}

在这个例子中,继承了Animal接口的类必须在Dog和Cat之间进行选择。

密封类的定义

Java 15还引入了密封类。密封类可以限制其他模块在其继承层次结构上的扩展。密封类使用sealed关键字进行声明。

【代码示例】

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

public final class Car extends Vehicle {
  void drive() { System.out.println("Driving a car"); }
}

public non-sealed class Bike extends Vehicle {
  void drive() { System.out.println("Driving a bike"); }
}

在这个例子中,Vehicle是一个密封类,它只允许Car和Bike两个类作为其扩展。Car是一个final类,不能被子类扩展,而Bike是一个非密封的类,可以被其他模块扩展。

密封类和密封接口的区别
  • 密封类可以有子类,但是只能在同一个模块中定义。而密封接口不能有子类。
  • 密封类可以是final,但密封接口必须声明一个非final关键字。
  • 密封接口可以扩展其他接口,但密封类只能扩展其他类。
总结

Java 15中的密封接口和密封类可以帮助Java程序员更好地管理其代码库并减少缺陷。它们是Java 15的一个新功能,可以帮助开发人员更好地组织和限制继承。这两个新功能可以提高代码的可维护性和可读性,也可以帮助开发人员更好地控制其代码库。