Java 15 introduces a sealed classes as preview feature which provides a fine grained control over inheritance. Following are salient points to consider for a sealed class −
- Sealed class is declared using sealed keyword.
- Sealed classes allow to declare which class can be a subtype using permits keyword.
- A class extending sealed class must be declared as either sealed, non-sealed or final.
- Sealed classes helps in creating a finite and determinable hiearchy of classes in inheritance.
Example
Consider the following example −
Java15Tester.java
public class Java15Tester {
public static void main(String[] args) {
Person manager = new Manager(25, "Robert");
manager.name = "Robert";
System.out.println(getId(manager));
}
public static int getId(Person person) {
if (person instanceof Employee) {
return ((Employee) person).getEmployeeId();
}
else if (person instanceof Manager) {
return ((Manager) person).getManagerId();
}
return -1;
}
}
abstract sealed class Person permits Employee, Manager {
String name;
String getName() {
return name;
}
}
final class Employee extends Person {
String name;
int id;
Employee(int id, String name){
this.id = id;
this.name = name;
}
int getEmployeeId() {
return id;
}
}
non-sealed class Manager extends Person {
int id;
Manager(int id, String name){
this.id = id;
this.name = name;
}
int getManagerId() {
return id;
}
}
Compile and Run the program
$javac -Xlint:preview --enable-preview -source 14 Java15Tester.java
$java --enable-preview Java15Tester
Output
25