为什么子类型方法中不能抛出比父类型方法更多的异常
作者:互联网
子类在覆盖父类方法的时候,父类的引用是可以调用该方法的,如果父类的引用调用子类的方法,那么这个多抛出来的异常,就可能处于一种无法被处理的状态。下面,我就通过代码进行一下演示:
我们先定义一个Animal类:
class Animal
{
public void eat()throws IOException,FileNotFoundException
{
System.out.println("eat");
}
}
接着,我们再定义一个Tiger类继承该Animal类
class Tiger extends Animal
{
public void eat()throws IOException ,Exception
{
System.out.println("Tiger eat animal");
}
}
这样,tiger的eat方法里,就有一个Exception 异常,这个异常的级别高于IO。也就是说对IO异常的处理,无法处理Exception 异常。
这个时候,如果我们定义一个测试方法,测试动物吃东西这个方法。
如下:
class Test
{
public void TestAnimalEat(Animal a)
{
try
{
a.eat();
}
catch(FileNotFoundException e1)
{
e1.printStackTrace();
}
catch(IOException e2)
{
e2.printStackTrace();
}
}
}
那么,这个方法是完全正确的,因为他处理了eat方法的两个异常。一个抛出,一个捕获。
这个时候,如果我们再进行如下的操作:
class TestDemo
{
public static void main(String[] args)
{
Test t = new Test();
Tiger tiger = new Tiger();
t.TestAnimalEat(tiger);
}
}
标签:比父,void,public,Tiger,class,Animal,类型,方法,eat 来源: https://www.cnblogs.com/gtz0/p/16369337.html