用空体接口实现

时间:2010-10-19 22:41:52

标签: java interface

我有这种用例

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类可以是抽象的,而不是为接口i实现method2。

一般的做法是,如果我不希望我的类B是抽象的,如果它没有方法2的任何实现,则从method2抛出异常?

4 个答案:

答案 0 :(得分: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 ...
    }
}

答案 1 :(得分:2)

如果您不打算从接口实现方法,则可以抛出UnsupportedOperationException。实际上,如果可能的话,应该避免这种情况,也许重新考虑设计。

答案 2 :(得分:1)

如果B不知道如何实现method2,那么你的界面有点不对劲。你需要一个更通用的接口,没有method2,也许还需要一个扩展接口,它包含方法,但不是由B实现的。

答案 3 :(得分:0)

标准Java库中有一些先例。一些最值得注意的是来自Iterator接口的“remove”方法,它抛出UnsupportedOperationException。记住要记录界面,说允许抛出此异常。