Method overriding in Java throwing exceptions

∥☆過路亽.° 提交于 2019-11-28 08:21:52

问题


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.


回答1:


NullPointerException and RuntimeException are both unchecked exceptions.

They don't need to be listed in the throws clause.




回答2:


You can only reduce or eliminate the exception thrown in your overridden methods. Throwing broader exceptions is not allowed by the language.

From the Java docs:

"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."




回答3:


Yes, you are right that the first problem happened because of change of method signature. Using NPE and RuntimeException to whet it further is not correct because runtime exceptions need not be declared on the signature.



来源:https://stackoverflow.com/questions/11332684/method-overriding-in-java-throwing-exceptions

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!