为什么覆盖的方法不能抛异常?
为什么覆盖的方法不能抛异常?
例如我在Thread类里重写了run()方法之后, 不能在run()方法后面抛异常. run()throws Exception是错误的!
请赐教谢谢各位~
------解决方案--------------------子类覆盖的方法能跑出的异常不能超出父类抛出异常的范围。
基本语法,最好再多看看书。
------解决方案--------------------在子类中一个重写的方法只能抛出父类声明过过的异常或者异常的子类。但是重载并不受这点的限制,所以如果子类中有一个方法完全与父类中名称和参数相同,那么它只能抛出父类中声明过的异常或者异常的子类。
在这里需要完全区分开重载与重写的区别。
重载是指在一个类中有两个或者两个以上具有相同方法名的方法,称之为重载。重载方法只能通过不同的参数类型和参数顺序进行重载,不能通过改变方法的返回值进行重载。(注意一点,重载的方法可以具有不同的返回类型)
重写方法是指重新写一个方法覆盖原有的方法,冲写要求重写后的方法与原始方法有完全相同的名称,包括返回类型。(那么注意一点,经static修饰的方法是不能够被重写的)。
也许是设计规则的时候出于安全或者什么其它方面的考虑,还需要高手解答。
------解决方案--------------------覆盖方法是实现多态的关键,考虑一下多态的场合,调用方法的时候如果需要捕获异常,只能捕获父类中方法声明可能抛出的异常,而如果允许子类抛出新的异常,这时候就无法处理了。
------解决方案--------------------子类抛出的异常只能是父类抛出的异常或是异常的子类。不能超出父类抛出的异常的范围。