Uma vez que as classes "RuntimeException" e "Exception" nao possuem nenhuma implementação de código (métodos proprios) alem dos construtores, porque as mesmas nao sao abstratas?
Ha algum motivo conhecido para isso ou simplesmente foi definido assim pelos desenvolvedores da linguagem?
EDIT: Acabei vendo que é usual "lançarmos" exceções através das classes "RuntimeException" e "Exception" diretamente.
Ex.:
throw new Exception("Minha Excecao");
Entendo então o porque das classes "RuntimeException" e "Exception" nao serem abstratas, uma vez que para fazer isso precisamos instanciar as mesmas.
Ficou a duvida, quando devemos lançar as excecoes pelas classes "RuntimeException" e "Exception" (nao entrando em mérito de checked e unchecked) e quando devemos criar classes especificas para isso (como mostrado no exercício).
Qual seria a "boa pratica" ou mesmo a "ideia comum" adotada pela comunidade Java para isso?