没有多重继承且没有代码重复的多重继承

Lev*_*lho 5 c# java oop inheritance

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

想象一下,我有一个基类Foo,从中我希望创建三个子类:

  • Class Bar继承Foo并实现功能"A"
  • Baz类继承Foo并实现功能"B"
  • Qux继承Foo并实现功能"A"和"B"

想象一下,实现功能"A"和"B"的代码总是一样的.有没有办法只为"A"和"B"编写一次代码,然后将相应的类应用(或"继承")它?

Tud*_*dor 3

嗯,我能看到您在 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();          
    }       
}
Run Code Online (Sandbox Code Playgroud)

现在Qux既具有通过普通继承的功能Foo,又具有通过组合实现的A功能B