java当中throws子句在继承当中overrride时有什么规则?

    xiaoxiao2021-04-02  44

    8.throws子句在继承当中overrride时的规则 马克-to-win:当子类方法override父类方法时,throws子句不能引进新的checked异常。换句话说:子类override方法的throws子句checked异常不能比父类多。马克-to-win:上面一条是死语法规定,但是为什么Sun公司有这样的规定?这主要是为客户的主调代码着想。比如(父类)动物,(子类)狗,(子类的子类)哈巴狗,都有call这个方法。马克-to-win:当我客户的主调方法中某一时刻写了一个兼容代码test(见下面的例子),假如语法上子类可以随意引进新异常,我客户这段主调代码就会报错了。参考下例: 例:1.8.1 import java.io.IOException; class Animal{ void call() throws IOException { System.out.println("Animal"); } } class Dog extends Animal{ void call() throws IOException { System.out.println("Dog"); } } class Collie extends Dog{ void call() throws IOException { System.out.println("Collie"); } } class CallerMark_to_win { /*马克-to-win:如果java语法允许Collie比Dog多一个ABC异常的话,下面的catch也必须得捕获ABC这个异常或加throws子句,这样的话, 代码就无法编写了,谁知道将来你的子类再加进什么异常?马克-to-win:我的这段代码如何能做到兼容所有的类?但是现在Sun公司规定,子类的异常不能多于父类,我写的代码从异常角度来讲就没问题了,换句话说就兼容了*/ 。。。。。。。。。。。。。。。。。 详情请进: http://www.mark-to-win.com/JavaBeginner/JavaBeginner5_web.html#throwsInInheritanceOverride
    转载请注明原文地址: https://ju.6miu.com/read-665773.html

    最新回复(0)