马克社区吧 关注:484贴子:446
  • 2回复贴,共1

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

只看楼主收藏回复

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


回复
1楼2014-08-10 10:53
    子类方法抛出的异常类型只能是其父类的被重写方法的异常类型相同或者其子类


    回复
    2楼2016-01-28 22:12


      回复
      3楼2016-02-04 22:37

        扫二维码下载贴吧客户端

        下载贴吧APP
        看高清直播、视频!