sealed modifier to a class and provides a list of its subclasses in the
permits clause (for subclasses in other compilation units).
If the class does not have subclasses, it will get the final modifier
Any subclasses that are not marked as sealed, non-sealed or final,
will get the non-sealed modifier.