Przesłanianie metod w Java rzuca wyjątki

Próbuję zrozumieć rzutowanie obiektów i nadpisywanie metod.

Mam fragment kodu:

    public class ExceptionClass{
        void m() throws SQLException{}

    }

    class A extends ExceptionClass{

        void m() throws Exception{}
    }

Daje to błąd „Wyjątek wyjątku nie jest zgodny z klauzulą ​​throws w ExceptionClass.m ()”.

To samo, gdy piszę jako:

    public class ExceptionClass{
        void m() throws SQLException{}
    }

    class A extends ExceptionClass{

        void m() throws RuntimeException{}
    }

To nie daje żadnego błędu, a metoda jest również nadpisywana poprawnie. Po pewnej analizie pomyślałem, że może tak być, ponieważ SQLException rozszerza się z klasy Exception, dlatego nie możemy zastąpić „SQLException” przez „Exception” w podklasie (zmieniamy sygnaturę metody nadpisania).

Ale wtedy to zrobiłem:

    public class ExceptionClass{
        void m() throws NullPointerException{}
    }

    class A extends ExceptionClass{
        void m() throws RuntimeException{}  
    }

Ale tutaj nie ma błędu ..! Myślałem, że powinien dać ten sam błąd z powodu, o którym wspomniałem powyżej.

Nie wiem, dlaczego tak się zachowuje. Jakie są również zasady, których należy przestrzegać, gdy nadpisujemy metody, które rzucają wyjątki w podpisie metody.

questionAnswers(3)

yourAnswerToTheQuestion