一般规则:
- .若父类中被重写的方法使用了throws的方式处理了异常,那么子类中重写的方法也应该使用throws的方式处理异常,并且其异常类不能超过父类中的异常类
举例:
public class OverrideTest {
public static void main(String[] args) {
OverrideTest test = new OverrideTest();
test.display(new SubClass());
}
public void display(SuperClass s) {
try {
s.method();
} catch (IOException e) {
e.printStackTrace();
}
}
}
class SuperClass{
public void method() throws IOException {
}
}
class SubClass extends SuperClass{
public void method() throws FileNotFoundException{
}
}
- 首先SuperClass和Subclass存在子父类关系。
- 在OverrideTest类中定义了display方法,并以SuperClass类的对象作为输入,方法里面调用了SuperClass类的method方法,并进行了try-catch处理。处理掉了IOException.
- 此时一个Override类的对象test调用display方法,利用多态性输入子类Subclass的对象,则display里调用的method方法实际是子类Subclass的方法,该方法抛出的异常是FileNotFoundException(<IOException)。但此时display中try-catch仍然有效。故而应当'<='
由此也可以引出另一条规则:
父类中被重写的方法中如果没有使用throws的方式处理异常,那么子类中重写了的方法也不能使用throws。
若使用了,则在使用多态性时,可能会导致子类抛出的异常无人处理。 -----感谢尚硅谷ss