我有两个类需要扩展一个类。我收到编译器错误,因为这在 Java 中不会发生。我知道你可以在 Java 中实现任意数量的接口,但只能扩展另一个类。如何解决此问题?
使用"has A"关系而不是"is An"。
class A
class B
你(认为)你想要:
class C extends A, B
相反,请执行此操作:
class C {
A theA;
B theB;
}
多重继承几乎总是被滥用。将类作为导入其数据和方法的简单方法进行扩展是不合适的。如果你扩展一个类,它应该真正是一个"是"的关系。
例如,假设你有类,
class Bank extends Financial
class Calculator
如果您想在 Bank
中使用 Calculator
的功能,您可以这样做,
class Bank extends Calculator, Financial
但是,Bank
绝对不是Calculator
。银行使用Calculator
,但它本身不是。当然,在java中,你无论如何都不能这样做,但是还有其他语言可以。
不买这些,如果你真的希望Calculator
的功能成为Bank
接口的一部分,你可以通过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"的关系
"扩展一个类的两个类"是合法的。
"一个类扩展两个类"违背了语言的规范。如果您不想考虑接口,则无法完成。
两个类扩展一个类? 像这样:
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; }
为了避免钻石问题,Java不支持通过类进行多重继承,但它支持使用接口。
因此,您可以使用Association
关系。
Class A {}
Class B {}
Class C implements SomeInterface {
A a;
B b;
// setter getter for a and b and other methods
}