Java中的Diamond继承与抽象类

时间:2018-05-13 00:06:09

标签: java abstract-class multiple-inheritance diamond-problem

我有一个带有几个抽象类的作业,包括继承,但我在作业的特定位置遇到了问题。

这就是我所拥有的(靠近问题将要发生的具体地点):

public abstract class A {
    //some fields
    //constructor
    //some functions
}
public abstract class B extends A {
    //some fields
    //constructor
    //override functions
    //some new functions
}
public abstract class C extends A {
    //some fields
    //constructor
    //override functions
    //some functions
}
/* class D that extends both B and C */

现在我需要创建扩展B类和C类的D类 我知道多重继承不能在java中使用,所以:

  1. 我考虑过代理DP,但是我不能创建2个B类和C类实例(也不能扩展一个并创建另一个实例,因为它们都是抽象的)。
  2. 我也想过可能用更复杂的函数/更多字段来扩展类,并创建另一个类的接口,但这会让我在新课程中添加该类的所有字段(我不认为&# 39;正确的方式")。
  3. 我也不确定是否更改任何已存在的类是我需要做的作业。
  4. 换句话说,我失去了......

1 个答案:

答案 0 :(得分:2)

不能创建扩展B和C的D类。

相反,请考虑使用接口,例如将A,B,C视为接口。

public interface A {
    //some functions
}
public interface B extends A {
    //some functions
}
public interface C extends A {
    //some functions
}
public abstract class D implements C,B {
    ...
}