[英]Can Java EE 7's core interfaces (EntityManager, …) extend AutoClosable?
[英]Can an interface extend multiple interfaces in Java?
一个接口可以在 Java 中扩展多个接口吗? 此代码在我的 IDE 中显示有效,并且可以编译:
interface Foo extends Runnable, Set, Comparator<String> { }
但我听说 Java 中不允许多重继承。 为什么接口会出现异常?
是的,你可以做到。 一个接口可以扩展多个接口,如下所示:
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
一个接口可以扩展多个接口。
一个类可以实现多个接口。
但是,一个类只能扩展一个类。
在谈论interface
和class
时,请注意如何使用extends
和implements
这两个词。
从 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中扩展多个接口吗?
答案是:是的。
根据JLS
一个接口可以声明为一个或多个其他接口的直接扩展,这意味着它隐式指定了它扩展的接口的所有成员类型、抽象方法和常量,除了它可能隐藏的任何成员类型和常量。
您可以扩展多个Interfaces
但不能扩展多个classes
。
在 Java 中无法扩展多个类的原因是 C++ 的糟糕体验,这是可能的。
多重继承的替代方案是一个类可以实现多个接口(或者一个接口可以扩展多个接口)
我认为您的困惑在于多重继承,这样做是不好的做法,而在 Java 中这也是不可能的。 但是,Java 允许实现多个接口,而且它也是安全的。
一个 Java 类只能扩展一个父类。 不允许多重继承。 然而,接口不是类,一个接口可以扩展多个父接口。
例如,看看这里: http : //www.tutorialspoint.com/java/java_interfaces.htm
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.