先看代碼
/*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());
}
}
覆蓋時,子類方法覆蓋父類方法,只能拋出父類方法異?;蛘咴摦惓5淖宇?br>
如果父類方法拋出多個異常,子類只能拋出父類異常的子集 (子類異常必須在父類異常的處理中)子類不能比父類拋新的異常
父類已經(jīng)有問題,子類不能比父類還有問題
有一種情況只能try 不能throws聲明
被覆蓋的方法沒有拋出異常,子類在覆蓋時,子類方法中發(fā)生了異常 只能try不能聲明出去
interface Inter{
void Show(); //沒有方法體時,方法不拋出異常
}
class D1 implements Inter{
public void Show(){
try {//子類不能比父類更有問題所以不能拋出
throw new Exception();
}
catch (Exception e){//將編譯檢測異常轉(zhuǎn)換為運行時異常,讓程序停掉
throw new RuntimeException();//這個異常不用聲明
}
}
}