why custom exception extends runtimeexception