继承中的异常处理

时间:2014-09-08 14:55:13

标签: java inheritance exception-handling

这是链接中的问题延续: I am learning the Exception handling in java (basically in inheritance) 该子类方法必须抛出异常,这是父类方法的子类。

  

"当子类重写超类中的方法然后子类   方法定义只能指定异常类的全部或子集   在父类方法的throws子句中(或重写方法"

这是一条规则。但我无法弄清楚制定这条规则的原因是什么,为什么不允许反之亦然。为什么要创建此规则

1 个答案:

答案 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
   }
 }

如果他们都抛出了独立的异常,那么你就无法做到这一点。