Sealed Classes and Interface Beginning with JDK 17, java supports declaration of a class that can be inherited by only specific subclasses. Sealed interfaces controls implementing classes and extending interfaces. The subclass of sealed classes should be declared either final, sealed or non-sealed. If all classes or interfaces are in the same file, permit clause is not required. Sealed Classes public sealed class MySealedClass permits A,B,C{ // ... } public final class A extends MySealedClass{ // ... } public sealed class B extends MySealedClass permits D{ // ... } public non-sealed class C extends MySealedClass{ // ... } Sealed interfaces public sealed interface MySealedIf permits A,B,IC{ void myMeth(); } public final class A implements MySealedIf{ // ... } public non-sealed class B implements MySealedIf{ // ... } public non-sealed interface IC extends MySealedIf{ // ... }