马克社区吧 关注:458贴子:423
  • 0回复贴,共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


IP属地:北京1楼2014-08-10 10:53回复