Переопределение метода в Java, генерирующее исключения
Я пытаюсь понять Приведение объектов и переопределение методов.
У меня есть кусок кода:
public class ExceptionClass{
void m() throws SQLException{}
}
class A extends ExceptionClass{
void m() throws Exception{}
}
Это приводит к ошибке «Исключение Исключение не совместимо с предложением throws в ExceptionClass.m ()».
То же самое, если я напишу как:
public class ExceptionClass{
void m() throws SQLException{}
}
class A extends ExceptionClass{
void m() throws RuntimeException{}
}
Это не дает никакой ошибки, и метод также корректно переопределен. После некоторого анализа я подумал, что это может быть, поскольку SQLException выходит за пределы класса Exception, поэтому мы не можем заменить «SQLException». с & quot; Исключением & quot; в подклассе (мы меняем сигнатуру переопределенного метода).
Но потом я сделал это:
public class ExceptionClass{
void m() throws NullPointerException{}
}
class A extends ExceptionClass{
void m() throws RuntimeException{}
}
Но здесь нет ошибок ..! Я думал, что это должно дать ту же ошибку из-за причины, которую я упомянул выше.
Я не уверен, почему он так себя ведет. Также, каковы правила, которым нужно следовать, когда мы переопределяем методы, которые генерируют исключения в сигнатуре метода.