value class One { private int value; synchronized void x() {} } value class Two extends One {} value class Three extends java.util.ArrayList {} abstract value class Four {} value class Five extends Four {} class Six extends Four {} // it's valid to extend a value class with an identity class value interface Seven {} value enum Eight {} value record Nine(int no) {} sealed value class Ten {} non-sealed value class Eleven {} abstract sealed value class Twelve {} value class Thirteen extends Twelve { void x() { synchronized (this) { System.out.println(); } } } value class USDCurrency implements Comparable { private int cs; // implicitly final private USDCurrency(int cs) { this.cs = cs; } public USDCurrency(int dollars, int cents) { this(dollars * 100 + (dollars < 0 ? -cents : cents)); } @Override public int compareTo(USDCurrency o) { return 0; } }