我有一个关于如何用不允许多重继承的语言处理以下场景的理论问题。
假设我有一个基类 Foo,我希望从中创建三个子类:
- Bar 类继承Foo 并实现功能“A”
- Baz类继承了Foo并实现了功能“B”
- 类 Qux 继承了 Foo 并实现了功能“A”和“B”
假设实现功能“A”和“B”的代码始终相同。有没有办法只为“A”和“B”编写一次代码,然后让适当的类应用(或“继承”)它?
最佳答案
嗯,我认为您在 C#/Java 中实现这一目标的唯一方法是组合。考虑一下:
class Foo {
}
interface A {
public void a();
}
interface B {
public void b();
}
class ImplA implements A {
@Override
public void a() {
System.out.println("a");
}
}
class ImplB implements B {
@Override
public void b() {
System.out.println("b");
}
}
class Bar extends Foo {
A a = new ImplA();
public void a() {
a.a();
}
}
class Baz extends Foo {
B b = new ImplB();
public void b() {
b.b();
}
}
class Qux extends Foo {
A a = new ImplA();
B b = new ImplB();
public void b() {
b.b();
}
public void a() {
a.a();
}
}
现在 Qux
通过正常继承具有 Foo
的功能,但也有 A
和 B
的实现按组成。
关于c# - 多继承无多重继承无代码重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10774143/