The toString method will print out several components:
Users might like to see additional information with the exception. API consumers should pull this out of properties on your child class, but the parent class might not be able to deal with the arbitrary types at runtime the children can introduce, so bringing them all down to strings simplifies that.
This is the name of the exception class, suitable for printing. This should be static data (e.g. a string literal). Override it in subclasses.