ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

为什么子类型方法中不能抛出比父类型方法更多的异常

2022-06-13 00:00:41  阅读:132  来源: 互联网

标签:比父 void public Tiger class Animal 类型 方法 eat


子类在覆盖父类方法的时候,父类的引用是可以调用该方法的,如果父类的引用调用子类的方法,那么这个多抛出来的异常,就可能处于一种无法被处理的状态。下面,我就通过代码进行一下演示:


我们先定义一个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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有