寻找继承解决方案

时间:2012-10-12 10:57:58

标签: java inheritance interface

这是我在Java中的场景:

interface I{}
class A implements I{}
class B extends A{}

那么,现在哪个类需要实现接口的I方法?如果A和B类共享实现怎么办? 最好的问候

4 个答案:

答案 0 :(得分:4)

class A必须提供所有实施,因为它不是abstract。有关详细信息,请参阅here

class B可以覆盖任何/所有这些方法。

如果你使A抽象(作为一个类),那么它可以为接口中的那些方法提供abstract方法(基本上只是将它们声明为abstract)和{{1将提供唯一的实现。

答案 1 :(得分:1)

1)A类必须实现Interface I的方法。

2)但是,如果需要,B类可以覆盖这些定义。

3)如果A类没有实施,A类应该被宣布为抽象的,在这种情况下,B类应该实现这些。

答案 2 :(得分:0)

您只需要在A类中实现I接口。 (可选)您可以在B类中覆盖该实现,但如果不这样做,则两个类的行为方式相同(使用A实现)。

答案 3 :(得分:0)

声明implements您承诺该类将实现某个接口。声明extends您允许自己重用基类中的实现。 extends隐含implements

因此,在您的情况下,您承诺A将实施I。接下来,您承诺B也将实施I,但会将A的实施作为基础。

因此,您的模式假设BA共享一些与A有关的实现作为来源。如果这是你想要的就好了。

你也可以:

1)状态class B implements I在这种情况下B将属于它自己。

2)将大部分实现保留在某个第三类中,例如Base,如下所示

interface I {}
class Base implements I {}
class A extends Base{}
class B extends Base{}

这种方式AB具有同等的权利。

3)您可以在任意类中保存实现并使用聚合并装饰它:

interface I {
   String method1(String a);
   String method2(String a);
}
class ImplementationHolder1 // does not implement I!
{ 
   String method1impl(String a) {};
}
class ImplementationHolder2 // does not implement I!
{ 
   String method2impl(String a) {};
}

class A implements I {
     ImplementationHolder1 h1;
     ImplementationHolder2 h2;
     String method1(String a) {
         return h1.method1impl();
     };
     String method2(String a) {
         return h2.method2impl();
     };
}

请记住,如果没有完全实现接口,则应该创建类abstract

如果它不符合您的需要,您也可以覆盖后代类中的任何基类实现。