码迷,mamicode.com
首页 > 编程语言 > 详细

Java编程思想之-反证法

时间:2015-05-30 18:25:28      阅读:128      评论:0      收藏:0      [点我收藏+]

标签:java编程思想

众所周之,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()方法的异常或其子类,必然会打破多态特性。


本文出自 “行意天下” 博客,请务必保留此出处http://4259297.blog.51cto.com/4249297/1656639

Java编程思想之-反证法

标签:java编程思想

原文地址:http://4259297.blog.51cto.com/4249297/1656639

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!