2010-10-19 77 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异常。请记住,将接口记录为说明抛出此异常是允许的。