Переопределение метода в 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{}  
    }

Но здесь нет ошибок ..! Я думал, что это должно дать ту же ошибку из-за причины, которую я упомянул выше.

Я не уверен, почему он так себя ведет. Также, каковы правила, которым нужно следовать, когда мы переопределяем методы, которые генерируют исключения в сигнатуре метода.

 Raedwald05 нояб. 2018 г., 10:35
Смотрите такжеstackoverflow.com/questions/10513374/…

Ответы на вопрос(3)

Да, вы правы, что первая проблема произошла из-за изменения сигнатуры метода. Использование NPE и RuntimeException для его дальнейшего недопустимо, так как исключения не должны быть объявлены в подписи.

NullPointerException а такжеRuntimeException обаunchecked исключения.

Они не должны быть перечислены вthrows пункт.

 04 июл. 2012 г., 19:31
@JigarJoshi: похоже, он это уже понимает.
 04 июл. 2012 г., 18:32
Суть в том, что OP объявляет метод переопределения, чтобы вызвать более широкое исключение
 04 июл. 2012 г., 19:35
Also what are the rules to follow when we override methods

Вы можете только уменьшить или устранить исключение, которое выдается в ваших переопределенных методах. Создание более широких исключений не допускается языком.

Отдокументы Java:

"The throws clause of an overriding method may not specify that this method will result in throwing any checked exception which the overridden method is not permitted, by its throws clause, to throw."

Ваш ответ на вопрос