Java 寻找继承解决方案

Java 寻找继承解决方案,java,inheritance,interface,Java,Inheritance,Interface,这是我在Java中的场景: interface I{} class A implements I{} class B extends A{} 那么,现在哪个类需要实现接口的I方法呢?如果A类和B类共享实现呢? 最好的祝愿A类必须提供所有实现,因为它不是抽象的。有关更多详细信息,请参阅 classB可以覆盖任何/所有这些方法 如果将A抽象化(作为一个类),那么它可以为接口中的那些方法提供abstract方法(基本上只是将它们声明为abstract)而B将提供唯一的实现。A类必须提供所有实现,因为

这是我在Java中的场景:

interface I{}
class A implements I{}
class B extends A{}
那么,现在哪个类需要实现接口的I方法呢?如果A类和B类共享实现呢?
最好的祝愿

A类
必须提供所有实现,因为它不是抽象的。有关更多详细信息,请参阅

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


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

A类
必须提供所有实现,因为它不是
抽象的
。有关更多详细信息,请参阅

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


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

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

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

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

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

3) 如果类A未实现,则应将其声明为抽象类,在这种情况下,类B应实现这些。类A必须实现接口I的方法

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


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

声明
实现
您承诺该类将实现某些接口。声明
扩展了
,您可以重用来自基类的实现<代码>扩展
意味着
实现

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

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

您还可以:

1) 状态
class B实现I
,在这种情况下
B
将由它自己决定

2) 将大部分实现保存在第三类中,例如称为
Base
,如下所示

interface I {}
class Base implements I {}
class A extends Base{}
class B extends Base{}
这样,
A
B
将享有平等的权利

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();
     };
}
请记住,如果类未完全实现接口,则应将其抽象化


此外,如果子类中的任何基类实现不符合您的需要,您也可以重写它。

声明
实现
您承诺该类将实现一些接口。声明
扩展了
,您可以重用来自基类的实现<代码>扩展
意味着
实现

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

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

您还可以:

1) 状态
class B实现I
,在这种情况下
B
将由它自己决定

2) 将大部分实现保存在第三类中,例如称为
Base
,如下所示

interface I {}
class Base implements I {}
class A extends Base{}
class B extends Base{}
这样,
A
B
将享有平等的权利

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();
     };
}
请记住,如果类未完全实现接口,则应将其抽象化

此外,如果子类中的任何基类实现不符合您的需要,您也可以重写它