if you have another string type that has a limited character set then it is not a subclass of string because it breaks the liskov substitution principal. in java land allowing user code to subclass string would create massive security issues in the sandbox. i think there is a good case for having different types of strings and providing runtime support so this is cheap but this is not subclassing.