我有两个类需要扩展一个类。我收到编译器错误,因为这在 Java 中不会发生。我知道您可以在 Java 中实现任意数量的接口,但只能扩展一个其他类。我该如何解决这个问题?
4 回答
使用“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
如果您想使用Calculator
in的功能,您可以这样做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”关系
“两个类扩展一个类”是合法的。
“一个类扩展两个类”是违反语言规范的。如果不想考虑接口,那是做不到的。
为了避免菱形问题,Java 不支持通过类进行多重继承,但它支持使用接口。
所以你可以使用Association
关系。例如
Class A {}
Class B {}
Class C implements SomeInterface {
A a;
B b;
// setter getter for a and b and other methods
}
两个类扩展一个类?像这样:
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; }