zoukankan      html  css  js  c++  java
  • JAVA 为什么子类继承父类方法之后,不能抛出比父类更多的异常

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

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

    则在调用tiger对象的时候,Test中的TestAnimalEat()方法只处理Animal类的eat()方法的两个异常,而这个Tiger类中的eat()方法多出来的Exception,就无法进行处理。所以,JAVA就不允许做这种子类抛出比父类更多的异常。

    当然,这里说更多是不合适的,子类不能抛出父类异常本身和其子异常以外的其他异常。比如,如果父类抛出一个Exception 异常,那么子类就可以随心所欲的抛出很多的异常了。因为这些异常都是父类异常的子异常。因为用到了多态,动态绑定的特性。深刻理解了多态的写法上面就理解了

    那么如果要联系现实,应该如何说呢。

            一个修理家电的人,他能够修理冰箱,电脑,洗衣机,电视机。 一个年轻人从他这里学的技术,就只能修理这些家电,或者更少。你不能要求他教出来的徒弟用从他这里学的技术去修理直升飞机。
     

    关注公众号 海量干货等你
  • 相关阅读:
    AJ学IOS(26)UI之iOS抽屉效果小Demo
    AJ学IOS(25)UI之触摸事件
    AJ学IOS(24)UI之注册案例
    AJ学IOS(23)UI之控制器管理
    AJ学IOS(22)UI之UIApplicationDelegate和UIWindow
    AJ学IOS(21)UIApplication设置程序图标右上⾓红⾊数字_联⺴指⽰器等
    AJ学IOS(20)UI之UIPickerView_点菜系统
    AJ学IOS(19)UI之QQ好友列表
    AJ学IOS(18)UI之QQ聊天布局_键盘通知实现自动弹出隐藏_自动回复
    AJ整理问题之:copy,对象自定义copy 什么是property
  • 原文地址:https://www.cnblogs.com/sowhat1412/p/12734151.html
Copyright © 2011-2022 走看看