Java编程思想之-反证法
2015-05-30 16:20
453 查看
众所周之,java中子类在覆盖父类方法时,如果父类抛出了异常,子类必须也必须抛出父类的异常或者异常的子类。
下面用用代码来证明这一结论:
但在传入function的参数时,传递是Fu的Zi类型对象,又用到了多态。f.show()调用的是子类的show方法,如果子类的show方法抛出非Fu类的show()方法的异常或其子类,必然会打破多态特性。
下面用用代码来证明这一结论:
package cn.itcast.exception; //下面定义三个自定义异常类,它们之间的关系如下: /* Exception |--AException |--BException |--CException */ class AException extends Exception { public AException(String msg) { super(msg); } } class BException extends AException { public BException(String msg) { super(msg); } } class CException extends Exception { public CException(String msg) { super(msg); } } //测试类 class Test { public void function(Fu f) { try { f.show(); } catch (AException e) { System.out.println(e.toString()); } } } //定义父类并定义一个show方法抛出A异常 class Fu { public void show() throws AException { System.out.println("I am father"); throw new AException("AEception by fu"); } } //定义子类覆盖父类show()方法 class Zi extends Fu { public void show() throws BException { System.out.println("I am son"); throw new BException("AException by zi"); } } public class ExceptionDemo { public static void main(String[] args) { // TODO Auto-generated method stub Test t = new Test(); t.function(new Zi()); } }上面的代码中,测试类Test的function的参数是父类Fu,调用f引用的show()方法,如果捕获异常的话,就应该捕获Fu的show方法的异常或其父类,这样才不会违背多态的特性。
但在传入function的参数时,传递是Fu的Zi类型对象,又用到了多态。f.show()调用的是子类的show方法,如果子类的show方法抛出非Fu类的show()方法的异常或其子类,必然会打破多态特性。
相关文章推荐
- java编程思想学习笔记
- java编程思想复用,多态,以及设计模式-多态
- java编程思想复用,多态,以及设计模式-复用篇
- Java编程思想学习笔记一
- Interfaces
- 《java编程思想》读书笔记(上)(第1章 至 第13章)
- 两个指定时间之间相差时间
- java定时器
- 格式化输出
- 根据20,80原则生成随机数据
- java经典算法_001斐波纳契数列
- java经典算法_002判断素数
- java经典算法_003水仙花数
- java经典算法_005三元运算符
- java经典算法_006最大公约数,最小公倍数
- java经典算法_007统计字符串中汉字,英文,数字的数量
- java经典算法_008求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字
- java经典算法_009"完数"等于他的所有因子之和,例如:6=1+2+3,求1000以内的所有完数
- java经典算法_010一球从100米高度自由落下,每次落地后反跳回原高度的一半.
- java经典算法_011有1,2,3,4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?