您的位置:首页 > 编程语言 > Java开发

Java编程思想之-反证法

2015-05-30 16:20 453 查看
众所周之,java中子类在覆盖父类方法时,如果父类抛出了异常,子类必须也必须抛出父类的异常或者异常的子类。
下面用用代码来证明这一结论:
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()方法的异常或其子类,必然会打破多态特性。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息