继承和接口

时间:2012-10-30 00:26:54

标签: java inheritance interface subclass

当涉及接口时,我一直在尝试理解继承。我想知道子类是如何创建的,如果它们遵循以下内容:

例如,假设我有:

  1. 实现接口I
  2. 的超类
  3. 和几个扩展超类A的子类
  4. 我的问题

    1. 我是否必须在扩展A的所有子类中提供接口方法'q和r'的实现?

    2. 如果我不在子类中提供接口的实现,我是否必须将该子类设为抽象类?

    3. 任何子类都可以实现我吗?例如C类扩展A实现I,这可能吗?即使它已经扩展了一个实现我的超类?

    4. 假设我没有从接口I提供方法r的实现,那么我将不得不制作超类A和抽象类!这是正确的吗?

    5. 我的示例代码:

          //superclass
          public class A implements I{
          x(){System.out.println("superclass x");}
          y(){System.out.println("superclass y");}
          q(){System.out.println("interface method q");}
          r(){System.out.println("interface method r");}
          }
      
          //Interface
          public Interface I{
          public void q();
          public void r();
          }
      
          //subclass 1
          public class B extends A{
          //will i have to implement the method q and r?
          x(){System.out.println("called method x in B");}
          y(){System.out.println("called method y in B");}
          }
      
          //subclass 2
          public class C extends A{
          //will i have to implement the method q and r?
          x(){System.out.println("called method x in C");}
          y(){System.out.println("called method y in C");}
      }
      

4 个答案:

答案 0 :(得分:7)

1)不,您不需要在子类中实现这些方法,因为它们已在超类中定义。子类将继承那些方法定义。

2)不,请参阅1.唯一的例外是如果超类是抽象的并且没有实现接口,那么如果子类不是抽象的话,则需要在子类中实现它。

3)否。它可以正确编译,但不起作用,所以不应该这样做。

4)是的,这是正确的。如果没有从接口实现方法,则需要使类抽象化。

答案 1 :(得分:1)

只有抽象类可以使它们保持抽象,这意味着不需要抽象类来为接口中的方法提供实现。

因为A具体,它必须提供实现。然后A的子类将从A继承这些实现。

但是,如果A是抽象的并且没有提供方法的实现,那么BC必须提供实现。

答案 2 :(得分:1)

1:不,如果你在你的超类中实现它们,它不需要在你的子类中实现它们

2:如果你没有实现超类中的方法,那么你必须将它抽象为抽象,然后让你的具体子类实现那些方法

3:是的,但绝对多余,因为你的超类已经在实施thrm。

4:是的,你应该在扩展你的超类

时在类中实现这些方法

答案 3 :(得分:0)

接口是对外界的承诺,“我可以提供这些方法。”

1)和2)和4)由于超类A已经实现了接口I,它已经向外界承诺了。超级A可以通过以下方式实现这一承诺:

  • 实现方法 - 在这种情况下,您的子类已经继承了该方法,并且不需要实现任何内容。
  • 声明自己是抽象的 - 在这种情况下,你的子类必须实现抽象方法,或者声明自己也是抽象的,并且“向下传递”到任何扩展子类的类。

3)超类A 的所有子类已经实现I,因为它们继承了“promise”,因此C类扩展A实现我是多余的。