方法覆蓋和異常 – JAVA編程語言程序開發技術文章

方法覆蓋要註意兩點:

n 訪問權限不能比父類的弱

n 拋出的異常不能比父類的多。(註意多並不是數量上的多,而是父類方法拋出的異常必須包含子類覆蓋方法拋出的異常)

請看下例:

[java]
class TestMyException2 { 
    public static void main(String[] args) { 
        ABC abc = new ABD(); 
        try { 
            abc.a(5); 
        } catch (EA e) { 
            e.test(); 
        } 
    } 

 
class EA extends Exception // 創建自己的編譯時異常  

    String s; 
 
    public EA(String s) { 
        this.s = s; 
    } 
 
    public EA() { 
    } 
 
    public void test() { 
        System.out.println(s); 
    } 
}; 
 
class EA1 extends EA // 創建自己的異常的子異常  

    public EA1(String s) { 
        super(s); 
    } 
}; 
 
class EA2 extends EA // 創建自己的異常的子異常  

    public EA2(String s) { 
        super(s); 
    } 
}; 
 
class ABC { 
    public void a(int i) throws EA { 
        if (i < 0) 
            System.out.println("normal"); 
        else 
            throw new EA("no normal"); 
    } 
}; 
 
class ABD extends ABC { 
    public void a(int i) throws EA1, EA2 // 雖然拋出的異常比父類多,但是都是父類異常的子類  
    { 
        if (i < 0) 
            System.out.println("dfsdafds"); 
        else if (i == 0) 
            throw new EA1("參數 == 0"); 
        else 
            throw new EA2("參數 > 0"); 
    } 
}; 
class TestMyException2 {
 public static void main(String[] args) {
  ABC abc = new ABD();
  try {
   abc.a(5);
  } catch (EA e) {
   e.test();
  }
 }
}

class EA extends Exception // 創建自己的編譯時異常
{
 String s;

 public EA(String s) {
  this.s = s;
 }

 public EA() {
 }

 public void test() {
  System.out.println(s);
 }
};

class EA1 extends EA // 創建自己的異常的子異常
{
 public EA1(String s) {
  super(s);
 }
};

class EA2 extends EA // 創建自己的異常的子異常
{
 public EA2(String s) {
  super(s);
 }
};

class ABC {
 public void a(int i) throws EA {
  if (i < 0)
   System.out.println("normal");
  else
   throw new EA("no normal");
 }
};

class ABD extends ABC {
 public void a(int i) throws EA1, EA2 // 雖然拋出的異常比父類多,但是都是父類異常的子類
 {
  if (i < 0)
   System.out.println("dfsdafds");
  else if (i == 0)
   throw new EA1("參數 == 0");
  else
   throw new EA2("參數 > 0");
 }
};

運行結果為:

參數 > 0

 

摘自  qq1712088151
 

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *