代码之家  ›  专栏  ›  技术社区  ›  kal

空体接口实现

  •  1
  • kal  · 技术社区  · 14 年前

    我有一个这样的用例

    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是抽象的,那么如果它没有method2的任何实现,那么它会从method2抛出异常吗?

    4 回复  |  直到 14 年前
        1
  •  4
  •   DwB    14 年前

    如果未完全实现接口的所有必需方法,则不应实现该接口。看来你真正想做的是:

    
    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
  •  2
  •   Alb    14 年前

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

        3
  •  1
  •   fresskoma    14 年前

    如果B不知道如何实现method2,那么您的接口有点错误。您需要一个更通用的接口,而不是method2,还可能需要一个扩展接口,该接口包含method to,但不是由B实现的。

        4
  •  0
  •   DJClayworth    14 年前