繁体   English   中英

寻找继承解决方案

[英]Looking for inheritance solutions

这是我在Java中的场景:

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

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

class A必须提供所有实现,因为它不是abstract 有关更多详细信息,请参见此处

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

如果将A抽象(作为一个类),则它可以为接口中的这​​些方法提供abstract方法(本质上只是将它们声明为abstract ),而B将提供唯一的实现。

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

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

3)如果A类没有实现,则应声明为抽象,在这种情况下,B类应实现这些。

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

声明implements您保证该类将实现某些接口。 extends说明允许您自己重用基类的实现。 extends意味着implements

因此,在您的情况下,您保证A将实现I 接下来,您保证B也将实现I但将使用A的实现作为基础。

所以,你的模式假设B与分享一些实施A关于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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM