2010-10-19 78 views
1

我有這種接口實現與空體

interface i { 
    void method1(); 
    void method2(); 
} 

class A implements i { 
    void method1() { 
    System.out.println("Method1 A .."); 
    } 

    void method2() { 
    System.out.println("Method2 A .."); 
    } 
} 


class B implements i { 

    void method1() { 
    System.out.println("Method1 B .."); 
    } 

    //Assume : B does not know how to implement method2 
    //void method2() { 

    //} 
} 

我知道B類的使用情況下可以是抽象的,而不是執行方法2的界面我。

是一般的做法是,如果我不想讓我的B類是抽象拋出從方法2.異常,如果不具備任何方法2.實施呢?

回答

4

如果你沒有完全實施的所有必需的接口的方法來實現延伸的接口,你不應該實現該接口。看起來你實際上想要做的是這樣的:

 

interface top 
{ 
    void method1(); 
} 

interface next extends top 
{ 
    void method2(); 
} 

class A implements next 
{ 
    public void method1() 
    { 
     ... something ... 
    } 

    public void method2() 
    { 
     ... something ... 
    } 
} 

class B implements top 
{ 
    public void method1() 
    { 
     ... something ... 
    } 
} 
 
2

如果您不打算執行從您可以拋出UnsupportedOperationException接口的方法。真的,儘可能避免這種情況,也許應該重新考慮設計。

+1

你的意思是java.lang.UnsupportedOperationException? – DJClayworth 2010-10-19 22:46:28

+0

@DJClayworth是的,當然,謝謝:) – Alb 2010-10-19 22:48:14

1

如果B不知道如何實現方法2,那麼你的界面是一種錯誤。你需要一個更通用的接口,沒有方法2,也許它包含的方法,但不是由B.

+0

可以有,你沒有自己的接口,但並有沒有對其進行控制的情況。 – Alb 2010-10-19 22:46:08

0

在標準Java庫中有一些這樣的優勢。一些最值得注意的是來自Iterator接口的「remove」方法,該方法拋出UnsupportedOperationException異常。請記住,將接口記錄爲說明拋出此異常是允許的。