I am trying to understand Object Casting and Method Overriding.
I have a piece of code:
public class ExceptionClass{
void m() throws SQLException{}
}
class A extends ExceptionClass{
void m() throws Exception{}
}
This gives an error "Exception Exception is not compatible with throws clause in ExceptionClass.m()".
The same if I write as :
public class ExceptionClass{
void m() throws SQLException{}
}
class A extends ExceptionClass{
void m() throws RuntimeException{}
}
This doesnt give any error and method is also overridden properly. After some analysis I thought that may be, since SQLException extends from Exception class therefore we cant replace "SQLException" with "Exception" in subclass (we are changing the signature of the overridden method).
But then I did this:
public class ExceptionClass{
void m() throws NullPointerException{}
}
class A extends ExceptionClass{
void m() throws RuntimeException{}
}
But there's no error here..! I thought it should give the same error because of the reason I mentioned above.
I am not sure why it is behaving in this way. Also what are the rules to follow when we override methods, which throw Exceptions in method signature.