由于 Java 中的一个类不能扩展多个类.我怎么能过得去



我有两个类需要扩展一个类。我收到编译器错误,因为这在 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
}

最新更新