Java 异常方法重写
如果我们谈论带有异常处理的方法重写,则有很多规则。规则如下:
父类方法未声明异常: 如果父类方法未声明异常,则子类重写方法无法声明已检查的异常,但可以声明未检查的异常。
父类方法声明了异常: 如果父类方法声明了异常,则子类重写方法可以声明相同,子类异常或无异常,但不能声明父异常。
父类方法未声明异常
注意: 1)规则: 如果父类方法未声明异常,则子类重写方法无法声明已检查的异常。
import java.io.*;
class Parent{
void msg(){
System.out.println("parent");
}
}
class TestExceptionChild extends Parent{
void msg()throws IOException{
System.out.println("TestExceptionChild");
}
public static void main(String args[]){
Parent p=new TestExceptionChild();
p.msg();
}
}
Output:Compile Time Error
注意: 2)规则: 如果父类方法未声明异常,则子类重写方法无法声明已检查的异常,但可以声明未检查的异常。
import java.io.*;
class Parent{
void msg(){
System.out.println("parent");
}
}
class TestExceptionChild1 extends Parent{
void msg()throws ArithmeticException{
System.out.println("child");
}
public static void main(String args[]){
Parent p=new TestExceptionChild1();
p.msg();
}
}
父类方法声明了异常
注意: 1)规则: 如果父类方法声明了异常,则子类重写方法可以声明相同,子类异常或无异常,但不能声明父异常。
子类重写方法声明父异常的示例
import java.io.*;
class Parent{
void msg()throws ArithmeticException{
System.out.println("parent");
}
}
class TestExceptionChild2 extends Parent{
void msg()throws Exception{
System.out.println("child");
}
public static void main(String args[]){
Parent p=new TestExceptionChild2();
try{
p.msg();
}
catch(Exception e){
}
}
}
Output:Compile Time Error
子类重写方法声明相同异常的示例
import java.io.*;
class Parent{
void msg()throws Exception{
System.out.println("parent");
}
}
class TestExceptionChild3 extends Parent{
void msg()throws Exception{
System.out.println("child");
}
public static void main(String args[]){
Parent p=new TestExceptionChild3();
try{
p.msg();
}
catch(Exception e){
}
}
}
子类重写方法声明子类异常的示例
import java.io.*;
class Parent{
void msg()throws Exception{
System.out.println("parent");
}
}
class TestExceptionChild4 extends Parent{
void msg()throws ArithmeticException{
System.out.println("child");
}
public static void main(String args[]){
Parent p=new TestExceptionChild4();
try{
p.msg();
}
catch(Exception e){
}
}
}
子类重写方法声明没有异常的示例
import java.io.*;
class Parent{
void msg()throws Exception{
System.out.println("parent");
}
}
class TestExceptionChild5 extends Parent{
void msg(){
System.out.println("child");
}
public static void main(String args[]){
Parent p=new TestExceptionChild5();
try{
p.msg();
}
catch(Exception e){
}
}
}