接口如何实现多重继承

fun*_*gdu 7 c# oop interface

在许多书中都写到接口是多重继承的替代,但我发现它们之间没有任何相似之处.

继承对于代码和功能的可重用性来说非常重要,并且多继承有助于重用来自多个类的代码,但是在接口中我没有找到任何这样的功能,除了类可以从多个接口继承.

接口只是函数/方法的声明,它本身不包含任何实现部分,因此继承此接口的类应该编写自己的实现代码.

所以我觉得在接口的情况下代码没有任何可重用性.

是否有任何文件或链接可以解答我的疑问与你的回答请分享.

kin*_*nak 3

关于代码的可重用性,你是对的。从这方面来说,多个接口并不能替代多重继承。

然而,继承还有另一个方面:它is-a在基类和子类之间建立了一种关系。因此,继承多个超类的类可以充当其中任何一个超类。在这方面,接口可以作为有效的替代,例如,接受接口的方法也将接受实现该接口的任何类,就像方法将接受从预期类派生的任何类一样。但正如您所说,每个类都必须自己实现接口方法。

例子:

public interface Foo {
    int doFoo();
}

public interface Bar {
    long doBar();
}

public class Baz {
    String doBaz() {
        return "This is baz";
    }
}

public class FooBar extends Baz implements Foo, Bar {
    public long doBar() {
        return 123;
    }
    public int doFoo() {
        return 456;
    }
}

// Accepts interface Bar implementing objects
public void doSomething(Bar b) {
    System.out.println(b.doBar() * 10);
}

// Accepts interface Foo implementing objects
public void doSomethingOther(Foo f) {
    System.out.println(f.doFoo() / 10);
}

// Accepts objects of class Baz and subclasses
public void doMore(Baz b) {
    System.out.println(b.doBaz());
}

void bla() {
    FooBar fb = new FooBar();

    // FooBar can act as Foo, Bar, and Baz
    doSomething(fb);
    doSomethingOther(fb);
    doMore(fb);
}
Run Code Online (Sandbox Code Playgroud)