1

这是我在 Java 中的场景:

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

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

4

4 回答 4

4

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

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

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

于 2012-10-12T10:59:57.573 回答
1

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

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

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

于 2012-10-12T11:01:44.173 回答
0

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

于 2012-10-12T11:00:24.097 回答
0

声明implements您承诺该类将实现某些接口。声明extends您允许自己重用基类的实现。extends暗示implements

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

因此,您的模式假设与作为源B共享一些实现。如果这是你想要的,那没关系。AA

你也可以:

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如果类没有完全实现接口,则应该创建类。

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

于 2012-10-12T11:23:45.573 回答