Так почему же класс Throwable?
Я могу думать о двух причинах:
- Исключения имеют состояние. В частности, трассировка сообщения, причины и стека.
- JVM легче реализовать эффективные блоки захвата. Проверка иерархии классов дешевле, чем проверка интерфейса.
Не будет ли проще обрабатывать исключения
если бы Throwable был интерфейсом?
Обработка исключений - сложная тема, независимо от того, являются ли исключения классами или интерфейсами. Я на самом деле подозреваю, что программистам на Java будет сложнее, если им придется упорядочивать свои блоки catch на основе произвольных интерфейсов, а не иерархий классов.
Но можно ли сделать это абстрактным?
В теории да. На практике нет. Слишком много кода зависит от возможности создания экземпляра Throwable для вызова getStackTrace.