c# - 多继承无多重继承无代码重复

标签 c# java oop inheritance

我有一个关于如何用不允许多重继承的语言处理以下场景的理论问题。

假设我有一个基类 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 的功能,但也有 AB 的实现按组成。

关于c# - 多继承无多重继承无代码重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10774143/

相关文章:

c# 相当于 java.util.concurrent.Future<T>

oop - Yii 和非数据库模型

python - Python 中的静态方法类和子类——有更好的设计模式吗?

c# - 相当于Xamarin forms中Div的 "float:left"

c# - 删除 ObservableCollection 中的一项

java - 扩展 AbstractMap 让我看到 put 方法的 UnsupportedOperationException

java - 如何在 Android "power save mode"设备中检测 "Xiaomi MIUI"?

java - 在 JPQL 中查询获取过去 X 个月的数据

php - 如何调用php中不存在的类方法?

c# - StreamWriter flush() 调用性能影响