實現的方法中,拋的異常只能比父類或介面中的少(轉)
實現的方法中,拋的異常只能比父類或介面中的少
import java.io.IOException; public interface IHello { void say(String msg) throws TestException, IOException; } class IHelloImpl implements IHello { @Override public void say(String msg) throws IOException { System.out.println("msg = [" + msg + "]"); } }
類StormyInning既擴充套件了基類Inning,又實現了介面Storm,而且基類Inning和介面Storm都宣告瞭方法event():
package com.liush.chapter12;
//Overridden methods may throw only the exceptions specified in their
//base-class versions,or exceptions derived from the base-class exceptions.
class BaseballException extends Exception {}
class Foul extends BaseballException {}
class Strike extends BaseballException {}
abstract class Inning {
public Inning() throws BaseballException {}
public void event() throws BaseballException {
// Doesen`t actually have to throw anthing
}
public abstract void atBat() throws Strike,Foul;
public void walk() {} //Throws no checked exceptions
}
class StormException extends Exception {}
class RainedOut extends StormException {}
class EventException extends StormException {}
class PopFoul extends Foul {}
interface Storm{
public void event() throws EventException;
public void rainHard() throws RainedOut;
}
public class StormyInning extends Inning implements Storm{
//OK to add new exceptions for constructor, but you must
//deal with the base constructor exceptions:
public StormyInning() throws RainedOut,BaseballException {}
public StormyInning(String s) throws Foul,BaseballException {}
@Override
public void rainHard() throws RainedOut {
// TODO Auto-generated method stub
}
public void event() {System.out.println(“Override the Inning.”);}
@Override
public void atBat() throws Strike, Foul {
// TODO Auto-generated method stub
}
public static void main(String[] args) {
try{
StormyInning si = new StormyInning();
si.atBat();
}
catch(PopFoul e) {System.out.println(“Pop foul”);}
catch(RainedOut e) {System.out.println(“Rained out”);}
catch(BaseballException e) {System.out.println(“Generic baseball exception”);}
try{
Inning i = new StormyInning();
Storm k=new StormyInning();
i.event();
k.event();
i.atBat();
}
catch(Strike e) { System.out.println(“Strike”);}
catch(Foul e) { System.out.println(“Foul”);}
catch(RainedOut e) { System.out.println(“Rained out”);}
catch(BaseballException e) { System.out.println(“Generic baseball exception”);}
catch (EventException e) { // TODO Auto-generated catch block
e.printStackTrace();
}
}
}
說明:類StormyInning既繼承了Inning基類,又實現了Storm介面,用基類來建立StormyInning物件時,根據向上轉型,event()是被認為是從Inning中來:
而用介面Storm來建立StormyInning物件時,event()則是被認為是從Sorm中來的:
因此,它們丟擲異常就決定於它們的基類和介面了:
http://blog.163.com/liu_sheng_han/blog/static/190591372201212394856740/
相關文章
- java關於繼承父類,需要實現父類中的構造方法Java繼承構造方法
- Java中的Exception拋異常對效能的影響 - BaeldungJavaException
- ORACLE中的異常(轉)Oracle
- 執行ArrayList的remove(object)方法拋異常?REMObject
- Java 列舉查詢並不拋異常的實現Java
- 淺談 PHP 中異常類的使用PHP
- 異常中的異常——藉助系統異常處理特例實現匪夷所思的漏洞利用
- HTML中樹的實現方法 (轉)HTML
- Java 中的異常Java
- java中的異常Java
- 解決Java執行過程中拋簽名異常的問題Java
- HttpServletRequest中的方法是哪個類實現的?HTTPServlet
- Java中父類方法重寫有哪些需要注意的?Java
- 全網最適合入門的物件導向程式設計教程:27 類和物件的Python實現-Python中異常層級與自定義異常類的實現物件程式設計Python
- .NET中異常處理的最佳實踐
- Java中的異常處理最佳實踐Java
- Android開發中,那些讓你相見恨晚的方法、類或介面Android
- C與C++中的異常處理 (轉)C++
- Java 建立使用者異常類、將異常一直向上拋、 throw和throws的區別Java
- C#中自定義異常類C#
- 試驗Oracle中實現行列轉換的方法(轉)Oracle
- Java中異常分類和Throw和Throws的區別Java
- MySQL儲存過程中捕獲異常的方法MySql儲存過程
- Java中處理SocketException: Connection reset”異常的方法JavaException
- Kotlin實戰【五】Kotlin中的異常Kotlin
- .NET中異常處理的最佳實踐(譯)
- 介面回撥的原理:介面變數 呼叫 被類實現的介面的方法變數
- 異常-自定義異常的實現和測試
- C與C++中的異常處理11 (轉)C++
- C與C++中的異常處理13 (轉)C++
- C與C++中的異常處理12 (轉)C++
- C與C++中的異常處理14 (轉)C++
- C與C++中的異常處理15 (轉)C++
- C與C++中的異常處理16 (轉)C++
- C與C++中的異常處理17 (轉)C++
- C與C++中的異常處理3 (轉)C++
- C與C++中的異常處理4 (轉)C++
- C與C++中的異常處理5 (轉)C++