子类在覆盖父类方法的时候,父类的引用是可以调用该方法的,如果父类的引用调用子类的方法,那么这个多抛出来的异常,就可能处于一种无法被处理的状态。下面,我就通过代码进行一下演示:
我们先定义一个Animal类:
[java] view plain copy
class Animal
{
public void eat()throws IOException,FileNotFoundException
{
System.out.println("eat");
}
}
[cpp] view plain copy
class Tiger extends Animal
{
public void eat()throws IOException ,Exception
{
System.out.println("Tiger eat animal");
}
}
这个时候,如果我们定义一个测试方法,测试动物吃东西这个方法。
如下:
[java] view plain copy
class Test
{
public void TestAnimalEat(Animal a)
{
try
{
a.eat();
}
catch(FileNotFoundException e1)
{
e1.printStackTrace();
}
catch(IOException e2)
{
e2.printStackTrace();
}
}
}
这个时候,如果我们再进行如下的操作:
[java] view plain copy
class TestDemo
{
public static void main(String[] args)
{
Test t = new Test();
Tiger tiger = new Tiger();
t.TestAnimalEat(tiger);
}
}
当然,这里说更多是不合适的,子类不能抛出父类异常本身和其子异常以外的其他异常。比如,如果父类抛出一个Exception 异常,那么子类就可以随心所欲的抛出很多的异常了。因为这些异常都是父类异常的子异常。
那么如果要联系现实,应该如何说呢。
一个修理家电的人,他能够修理冰箱,电脑,洗衣机,电视机。 一个年轻人从他这里学的技术,就只能修理这些家电,或者更少。你不能要求他教出来的徒弟用从他这里学的技术去修理直升飞机。