打字猴:1.700449093e+09
1700449093
1700449094 我们来看下面的例子,代码如下:
1700449095
1700449096 //父类
1700449097
1700449098 class Base{
1700449099
1700449100 //父类抛出IOException
1700449101
1700449102 public Base()throws IOException{
1700449103
1700449104 throw new IOException();
1700449105
1700449106 }
1700449107
1700449108 }
1700449109
1700449110 //子类
1700449111
1700449112 class Sub extends Base{
1700449113
1700449114 //子类抛出Exception异常
1700449115
1700449116 public Sub()throws Exception{
1700449117
1700449118 }
1700449119
1700449120 }
1700449121
1700449122 就这么一段简单的代码,展示了在构造函数中抛出受检异常的三个不利方面:
1700449123
1700449124 导致子类代码膨胀
1700449125
1700449126 在我们的例子中子类的无参构造函数不能省略,原因是父类的无参构造函数抛出了IOException异常,子类的无参构造函数默认调用的是父类的构造函数,所以子类的无参构造也必须抛出IOException或其父类。
1700449127
1700449128 违背了里氏替换原则
1700449129
1700449130 里氏替换原则是说“父类能出现的地方子类就可以出现,而且将父类替换为子类也不会产生任何异常”,那我们回过头来看看Sub类是否可以替换Base类,比如我们的上层代码是这样写的:
1700449131
1700449132 public static void main(String[]args){
1700449133
1700449134 try{
1700449135
1700449136 Base base=new Base();
1700449137
1700449138 }catch(IOException e){
1700449139
1700449140 //异常处理
1700449141
1700449142 }
[ 上一页 ]  [ :1.700449093e+09 ]  [ 下一页 ]