1、下面是Exception、RuntimeException、ArithmeticException这三个类的继承关系图
(1)被重写的方法无抛出异常,重写的方法也能够抛出任何运行时异常
package com.code.learn;
public class A {
public void test() {
System.out.println("A");
}
}
package com.code.learn;
public class B extends A {
public void test() throws RuntimeException {
System.out.println("B");
}
}
(2)被重写的方法抛出运行时异常,重写的方法能抛出比被重写的方法更大的运行时异常
package com.code.learn;
public class A {
public void test() throws ArithmeticException{
System.out.println("A");
}
}
package com.code.learn;
public class B extends A {
public void test() throws RuntimeException {
System.out.println("B");
}
}
(3)被重写的方法抛出运行时异常,重写的方法能抛出比被重写的方法更小的运行时异常
package com.code.learn;
public class A {
public void test() throws RuntimeException{
System.out.println("A");
}
}
package com.code.learn;
public class B extends A {
public void test() throws ArithmeticException {
System.out.println("B");
}
}
(4)被重写的方法抛出运行时异常,重写的方法能抛出和被重写的方法相同的运行时异常
package com.code.learn;
public class A {
public void test() throws RuntimeException{
System.out.println("A");
}
}
package com.code.learn;
public class B extends A {
public void test() throws RuntimeException {
System.out.println("B");
}
}
2、下面是Exception、IOException、CharacterCodingException这三个类的继承关系图
(1)被重写的方法无抛出异常,重写的方法不能够抛出任何非运行时异常
(2)被重写的方法抛出非运行时异常,重写的方法不能抛出比被重写的方法更大的非运行时异常
(3)被重写的方法抛出非运行时异常,重写的方法能抛出比被重写的方法更小的非运行时异常
(4)被重写的方法抛出非运行时异常,重写的方法能抛出和被重写的方法相同的非运行时异常
总结:无论是运行时异常还是非运行时异常重写的方法都必须小于等于被重写方法的异常