java方法重写中声明异常的原则

子类声明异常的范围不能超过父类声明的范围:

1. 父类没有声明异常,子类也不能;

2.不可以抛出原有方法抛出异常类的父类或者上层类

3.抛出的异常类型数目不可以比原有方法抛出的还多

例如:

import java.io.FileNotFoundException;
import java.io.IOException;
import java.text.ParseException;
import java.time.format.DateTimeParseException;
import java.util.zip.DataFormatException; import java.io.FileNotFoundException; import java.io.IOException; import java.text.ParseException; import java.time.format.DateTimeParseException; import java.util.zip.DataFormatException;
public  class A {
   public void s() throws IOException{  }
} public class A { public void s() throws IOException{ } }
class B extends A{
  public void s() throws FileNotFoundException{ }
} class B extends A{ public void s() throws FileNotFoundException{ } }
class C extends A{
  public void s(){ }
} class C extends A{ public void s(){ } }
class D extends A{
  public void s() throws IOException,FileNotFoundException{ }
} class D extends A{ public void s() throws IOException,FileNotFoundException{ } }
class E extends A{
  public void s() throws IOException,ArithmeticException,DateTimeParseException{ }
}
class F extends A{
  public void s() throws Exception{ }//拋出了父类抛出异常类的父类,错误
} class E extends A{ public void s() throws IOException,ArithmeticException,DateTimeParseException{ } } class F extends A{ public void s() throws Exception{ }//拋出了父类抛出异常类的父类,错误 }
class G extends A{
  public void s() throws IOException,DataFormatExceptionException{ } class G extends A{ public void s() throws IOException,DataFormatExceptionException{ }
    //错误,因为DataFormatExceptionException的父类也是Exception,所以超出了范围
} //错误,因为DataFormatExceptionException的父类也是Exception,所以超出了范围 }


经验分享 程序员 微信小程序 职场和发展