package com.atguigu.java;
import java.io.FileNotFoundException;
import java.io.IOException;
//子类重写父类的方法时抛出的异常大小不能比父类的异常大
//代码原理如下
//
public class TestOverride {
public static void main(String[] args) {
A a=new B();
try {
a.method1();
/*在编译过程中,此时可以认为引用的是父类A的method1()方法,
* 因此此时会抛出IO异常,在catch语句中进行处理
* 在运行的时候,此时引用的是子类B的method1()方法,
* 会抛出FileNotFoundException异常,但catch中的异常处理IO异常包括了
* FileNotFoundException异常,相当于把FileNotFoundException异常也处理了
* 因此程序能够运行
*
* 如果此时反过来,也就是说父类A抛出的异常是FileNotFoundException
* 子类B抛出的异常是IOException,由于catch中处理的是 FileNotFoundException异常
* 那么在运行的时候,IOException将无法解决,就会出现错误,本人认为这个与面向对象的多态性冲突
* 所以才有“子类重写父类的方法时抛出的异常大小不能比父类的异常大”规定
* */
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
class A{
public void method1() throws IOException{
}
}
class B extends A{
public void method1() throws FileNotFoundException{
}
}
//第一次写,但是以后也会一直坚持着写,就当做是对所学知识点的一个总结归纳吧。
还请各位大佬多多指教