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.