在许多书中都写到接口是多重继承的替代,但我发现它们之间没有任何相似之处.
继承对于代码和功能的可重用性来说非常重要,并且多继承有助于重用来自多个类的代码,但是在接口中我没有找到任何这样的功能,除了类可以从多个接口继承.
接口只是函数/方法的声明,它本身不包含任何实现部分,因此继承此接口的类应该编写自己的实现代码.
所以我觉得在接口的情况下代码没有任何可重用性.
是否有任何文件或链接可以解答我的疑问与你的回答请分享.
关于代码的可重用性,你是对的。从这方面来说,多个接口并不能替代多重继承。
然而,继承还有另一个方面:它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)