这是链接中的问题延续: I am learning the Exception handling in java (basically in inheritance) 该子类方法必须抛出异常,这是父类方法的子类。
"当子类重写超类中的方法然后子类 方法定义只能指定异常类的全部或子集 在父类方法的throws子句中(或重写方法"
这是一条规则。但我无法弄清楚制定这条规则的原因是什么,为什么不允许反之亦然。为什么要创建此规则
答案 0 :(得分:1)
要使polymorphism起作用,method signatures需要在预期的位置保持不变,以便它们符合相同的界面。
例如,如果您的Car
有一个方法drive()
会引发UnknownIgnitionException
并且您有一个Ford
extends
该类,那么您将会有时候想把它当成汽车(而不是Ford
类型Car
),所以你会期望方法drive()
在所有汽车中看起来和行为完全一样。
这意味着如果你想试驾一堆汽车(福特,菲亚特,保时捷)你可以拥有
for (Car c : listOfCars) //list contains Fords, Porches, Fiats, etc
{
try {
c.drive(); //All sub-classed Cars contain this exact method
}
catch (UnknownIgnitionException e)
{
//As all subclassed cars are restricted to the same method signature, you can be sure what exceptions all Cars throw
}
}
如果他们都抛出了独立的异常,那么你就无法做到这一点。