2013-01-10 58 views
1

我想覆蓋toString()幾種人格異常的方法,它們的類型爲ExceptionRuntimeException使用Java的OOP:避免重複代碼

假設我想爲ExceptionRuntimeException子類顯示testtoString()方法。所以我必須一次覆蓋toString()

我該怎麼做,因爲Java不支持多繼承?我只是不想寫這兩種類型的例外2倍toString()方法...

例子:

public class SubClassOfException extends Exception { 

    ... 

    @Override 
    public String toString() { 
     return "test"; 
    } 

} 

我的目標是創建SubClassOfRuntimeExceptionSubClassOfException因爲RuntimeException定製toString()方法的好處是Exception的子類。

有沒有辦法做到這一點,或者我必須將toString()代碼複製到SubClassOfExceptionSubClassOfRuntimeException

回答

4

由於您的SubClassOfExceptionRuntimeException的層級相同,因此無法通過繼承共享toString()方法。

但你並不需要或者複製的代碼,如果兩個toString()方法在具體的異常類型委派實際字符串建設一個共同的「例外字符串生成器」。我的意思是這樣

class ExceptionPrinter { 
    public static String exceptionToString(Exception e) { ... } 
} 

,並在這兩個異常類

@Override 
public String toString() { 
    return ExceptionPrinter.exceptionToString(this); 
} 
+0

是的我這樣做,但我會找到繼承另一種方式,但如果它是不可能的,我會做到這一點,THX;) –

+1

我看,但不幸的是這是不可能的,因爲繼承只能起作用 - 或者(準確地說)向下,而不是水平。 – Desty

+0

嗯謝謝你注意到這一點。這是合乎邏輯的,但我不知道這個「規則」 –