$ javac src/Reflect.java && java Reflect (21.0.10+7-Ubuntu-124.04) Shape: sealed, permits [Circle, Poly, Custom] Circle: final Poly: sealed, permits [Tri, Quad] Tri: final Quad: final Custom: open (non-sealed or plain) Hexagon: open (non-sealed or plain) circle triangle quad custom:Hexagon $ javac src/Reflect.java && java Reflect (25.0.4.1+1-LTS) Shape: sealed, permits [Circle, Poly, Custom] Circle: final Poly: sealed, permits [Tri, Quad] Tri: final Quad: final Custom: open (non-sealed or plain) Hexagon: open (non-sealed or plain) circle triangle quad custom:Hexagon $ javac src/Reflect.java && java Reflect (27+35) Shape: sealed, permits [Circle, Poly, Custom] Circle: final Poly: sealed, permits [Tri, Quad] Tri: final Quad: final Custom: open (non-sealed or plain) Hexagon: open (non-sealed or plain) circle triangle quad custom:Hexagon $ javac src/ImplicitPermits.java && java ImplicitPermits (21.0.10+7-Ubuntu-124.04) [ImplicitPermits$A, ImplicitPermits$B] $ javac src/ImplicitPermits.java && java ImplicitPermits (25.0.4.1+1-LTS) [ImplicitPermits$A, ImplicitPermits$B] $ javac src/ImplicitPermits.java && java ImplicitPermits (27+35) [ImplicitPermits$A, ImplicitPermits$B] $ javap -v -cp . 'PaymentDemo$Payment' | grep -A3 PermittedSubclasses (25.0.4.1+1-LTS) PermittedSubclasses: PaymentDemo$Card PaymentDemo$Upi PaymentDemo$NetBanking