先看代码
/*Exception
--|AException
----|AAexception
--|BEception*/
class AException extends Exception{
public AException(String message) {
super(message);
}
}
class AAException extends AException {
public AAException(String message) {
super(message);
}
}
class BException extends Exception {
public BException(String message) {
super(message);
}
}
class Fu{
void Show()throws AException{
System.out.println("Fu show");
}
}
class Zi extends Fu{
void Show()throws AAException{
System.out.println("zi show");
}
}
class Tool{
public void Method(Fu fu) {
try {
fu.Show();
}
catch (AException e){//无论抛出Aexception还是AAEception只要输入AException就能被捕获
System.out.println(0);
}
}
}
public class TestExceptionDemo{
public static void main(String[] args) {
Tool tool=new Tool();
tool.Method(new Zi());
}
}
覆盖时,子类方法覆盖父类方法,只能抛出父类方法异常或者该异常的子类
如果父类方法抛出多个异常,子类只能抛出父类异常的子集 (子类异常必须在父类异常的处理中)子类不能比父类抛新的异常
父类已经有问题,子类不能比父类还有问题
有一种情况只能try 不能throws声明
被覆盖的方法没有抛出异常,子类在覆盖时,子类方法中发生了异常 只能try不能声明出去
interface Inter{
void Show(); //没有方法体时,方法不抛出异常
}
class D1 implements Inter{
public void Show(){
try {//子类不能比父类更有问题所以不能抛出
throw new Exception();
}
catch (Exception e){//将编译检测异常转换为运行时异常,让程序停掉
throw new RuntimeException();//这个异常不用声明
}
}
}
网友评论