接口可以在Java中扩展多个接口吗?该代码在我的IDE中显示为有效,并且可以编译:
interface Foo extends Runnable, Set, Comparator<String> { }
但是我听说Java不允许多重继承。为什么接口似乎有例外?
接口可以在Java中扩展多个接口吗?该代码在我的IDE中显示为有效,并且可以编译:
interface Foo extends Runnable, Set, Comparator<String> { }
但是我听说Java不允许多重继承。为什么接口似乎有例外?
Answers:
是的,您可以做到。一个接口可以扩展多个接口,如下所示:
interface Maininterface extends inter1, inter2, inter3 {
// methods
}
单个类也可以实现多个接口。如果两个接口都有定义相同名称和签名的方法怎么办?
有一个棘手的问题:
interface A {
void test();
}
interface B {
void test();
}
class C implements A, B {
@Override
public void test() {
}
}
然后,单个实现对这两个都有效:)。
在这里阅读我的完整文章:
http://codeinventions.blogspot.com/2014/07/can-interface-extend-multiple.html
接口可以在Java中扩展多个接口吗?
答案是:是的。
根据JLS
一个接口可以声明为一个或多个其他接口的直接扩展,这意味着它隐式指定了它扩展的接口的所有成员类型,抽象方法和常量,但它可能隐藏的任何成员类型和常量除外。
从关于多重继承类型的Oracle文档页面中,我们可以在此处找到准确的答案。在这里,我们应该首先了解Java中的多重继承的类型:-
Java“不支持状态的多重继承,但自Java 8发布以来,它支持使用默认方法实现的多重继承和带有接口的类型的多重继承。
然后,这里出现“钻石问题”的问题以及Java如何处理它:-
在实现的多重继承的情况下,Java编译器会给出编译错误,并要求用户通过指定接口名称对其进行修复。这里的例子:
interface A {
void method();
}
interface B extends A {
@Override
default void method() {
System.out.println("B");
}
}
interface C extends A {
@Override
default void method() {
System.out.println("C");
}
}
interface D extends B, C {
}
所以在这里我们将得到错误,因为:-接口D从类型B和C继承了method()的不相关默认值接口D扩展了B,C
您可以像这样修复它:
interface D extends B, C {
@Override
default void method() {
B.super.method();
}
}
总结我们可以说Java 不支持 状态的多重继承,但它确实支持 实现的多重继承和类型的多重继承。
Java类只能扩展一个父类。不允许多重继承。接口不是类,但是,一个接口可以扩展多个父接口。
例如,在这里看看:http : //www.tutorialspoint.com/java/java_interfaces.htm