------- android培训、java培训、期待与您交流! ----------
/**异常在覆盖中的细节:
1,
子类在覆盖父类时,如果父类中被覆盖的方法抛出了异常。
那么子类覆盖的方法,只能抛出相同的异常,或者该异常的子类。
不能抛出和父类不同的异常
2,
如果父类的被覆盖的方法抛出了多个异常,子类在覆盖时,只能
抛出这些异常的子集,不能抛出超出范围的异常,
------------------------------------------
*/
Exception
|--AException
|--CException
|--BException
class AException extends Exception
{
}
class BException extends Exception
{
}
class CException extends AException
{
}
class Fu
{
void show() throws AException
{
}
}
class Test
{
void method(Fu f)
{
try
{
f.show
}
catch(AException e)
{
}
}
}
class Zi enxtends Fu
{
//Zi类覆盖了Fu类中的show()方法,但是抛出了和Fu类异常AExceptin不同的异常BException,就出现错误
void show() throws BException
{
}
}
class Demo48
{
public static void main(String[] args)
{
Test t=new Test();
t.method(new Zi());
}
}
--------------------------------------------
3,
如果被覆盖的方法没有抛出异常,
子类也不允许抛出异常,如果子类中真的出现异常,只能在子类
方法内进行try处理,绝对不允许throws声明。
万一处理不了,可以选择抛出运行时异常
interface Inter
{
void show();//public abstract void show();
}
class InterImpl implements Inter
{
public void show()
{
try
{
throw new Exception();
}
catch(Exception e)
{
//处理不了可以抛出运行异常RuntimeException
throw new RuntimeException("XXX异常信息");
}
}
}
本文详细介绍了在Java中子类覆盖父类方法时异常处理的规则。主要包括:子类方法只能抛出父类方法中声明异常的子类异常;若父类方法未声明异常,则子类覆盖方法也不得声明异常。
539

被折叠的 条评论
为什么被折叠?



