4

我有两个类需要扩展一个类。我收到编译器错误,因为这在 Java 中不会发生。我知道您可以在 Java 中实现任意数量的接口,但只能扩展一个其他类。我该如何解决这个问题?

4

4 回答 4

7

使用“has A”关系而不是“is An”。

class A
class B

你(认为)你想要:

class C extends A, B

相反,请执行以下操作:

class C {
  A theA;
  B theB;
}

多重继承几乎总是被滥用。将类扩展为导入其数据和方法的简单方法是不合适的。如果你扩展一个类,它应该是真正的“is An”关系。

例如,假设你有课,

class Bank extends Financial
class Calculator

如果您想使用Calculatorin的功能,您可以这样做Bank

class Bank extends Calculator, Financial

但是, aBank绝对不是 a Calculator。A Bank使用a Calculator,但它本身不是一个。当然,在 java 中,无论如何您都不能这样做,但是您可以使用其他语言。

如果您不购买其中的任何一个,并且您真的希望 的功能Calculator成为Bank's 接口的一部分,则可以通过 Java 接口来实现。

interface CalculatorIntf {
  int add(int a, int b);
}

class Calculator implements CalculatorInf {
  int add(int a, int b) { return a + b };
}

class Bank extends Financial implements CalculatorIntf
  Calculator c = new Calculator();

  @Override // Method from Calculator interface
  int add(int a, int b) { c.add(a, b); }
}

一个类可以实现任意数量的接口。请注意,这在技术上仍然是“具有 A”关系

于 2012-09-20T18:51:04.677 回答
1

“两个类扩展一个类”是合法的。

“一个类扩展两个类”是违反语言规范的。如果不想考虑接口,那是做不到的。

于 2012-09-20T18:50:31.857 回答
0

为了避免菱形问题,Java 不支持通过类进行多重继承,但它支持使用接口。

所以你可以使用Association关系。例如

Class A {}
Class B {}
Class C implements SomeInterface {
  A a;
  B b;
  // setter getter for a and b and other methods
}
于 2012-09-20T18:50:56.443 回答
0

两个类扩展一个类?像这样:

class A{ }
class B extends A{ }
class C extends A{ }

在这里,B 和 C(两个类)扩展 A(一个类)。但我相信你的意思是一个类扩展两个独立的类(多重继承)。解决方法:您可以制作一个具有两个单独对象(Has-A 关系)的复合对象,如下所示:

class A { }
class B { }
class C extends A { /*define new functionality here */ }
class D extends B { /*define new functionality here */ }
class E { private C cObj; private D dObj; }
于 2012-09-20T18:53:08.907 回答