Technical Overview & Strategic Context
While Java 11 stabilized modular long-term releases, Java 15, released in late 2020, addressed class hierarchy management: class inheritance was unrestricted by default, allowing public classes to be extended by any code. Java 15 resolved this by introducing a preview of Sealed Classes (JEP 360), which allow class declarations to specify exactly which subclasses can inherit from them, improving encapsulation.
Architectural Principle: Use sealed classes to manage class hierarchies. Declaring permitted subclasses explicitly protects internal implementations from unwanted extension.
Core Concepts & Architectural Blueprint
Sealed classes use the sealed and permits keywords. The compiler verifies that only listed subclasses extend the sealed class, preventing developer overrides. This release also introduced Hidden Classes, which are loaded dynamically to execute code safely without naming conflicts.
Performance & Capability Comparison
| OOP Paradigm | Classic Java Class | Java 15 Sealed Class | Developer Benefit |
|---|---|---|---|
| Inheritance | Can be extended by any subclass | Extended only by permitted subclasses | Protects API class designs |
| Class Loading | Standard JVM class path loader | Hidden Classes loaded dynamically | Prevents runtime naming conflicts |
| Garbage Collector | ZGC and Shenandoah experimental | ZGC and Shenandoah production-ready | Reduces GC pause times significantly |
Implementation & Code Pattern
To write sealed class hierarchies in Java 15, developers should follow these guidelines:
- ◆Enable preview features in compiler options to use sealed classes.
- ◆Use the sealed modifier on class declarations to restrict inheritance.
- ◆Declare permitted subclasses using permits statements.
- ◆Verify that permitted subclasses are declared final, sealed, or non-sealed.
// Java 15 Sealed Class hierarchy preview (2020)
package in.shivamitcs.portal.model;
// Declare sealed class and specify permitted subclasses
public abstract sealed class UserRecord permits StudentProfile, StaffProfile {
public abstract String getRole();
}
// Permitted subclass must be declared final, sealed, or non-sealed
public final class StudentProfile extends UserRecord {
@Override
public String getRole() { return "STUDENT"; }
}
public final class StaffProfile extends UserRecord {
@Override
public String getRole() { return "STAFF"; }
}
// Compiler blocks subclassing below:
// public class GuestProfile extends UserRecord {} // Compiler error!Operational Governance & Future Outlook
Java 15's introduction of sealed classes and hidden classes simplified class hierarchy management. Adding production-ready garbage collectors like ZGC helps optimize heap performance on server nodes.