一个接口可以在 Java 中扩展多个接口吗?

一个接口可以在 Java 中扩展多个接口吗? 这段代码在我的 IDE 中看起来是有效的,它可以编译:

interface Foo extends Runnable, Set, Comparator<String> { }

但我听说在爪哇多重继承是不允许的。为什么接口似乎有一个异常?

148167 次浏览

一个接口可以在 Java 中扩展多个接口吗?

答案是: 是的。

根据 JLS

接口可以声明为一个或多个的直接扩展 其他接口,这意味着它隐式指定所有成员 类型、抽象方法和它所扩展的接口的常量, 除了它可能隐藏的任何成员类型和常数。

是的,你可以做到。一个接口可以扩展多个接口,如下所示:

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

一个 接口可以 扩展多个接口

一个 同学们可以 实现多个接口

但是,同学们只能是 扩展一个类

在谈论 interfaceclass时,注意你使用 extendsimplements这两个词的方式。

可以扩展多个 Interfaces,但不能扩展多个 classes

在 Java 中不可能扩展多个类的原因是 C + + 的糟糕体验。

多重继承的替代方法是类可以实现多个接口(或者接口可以扩展多个接口)

我认为你的困惑在于多重继承,在这种情况下,这样做是不好的做法,而在 Java 中,这也是不可能的。然而,在 Java 中实现多个接口是允许的,而且也是安全的。

Java 类只能扩展一个父类。多重继承是不允许的。然而,接口不是类,并且一个接口可以扩展多个父接口。

例如,看看这里: http://www.tutorialspoint.com/java/java_interfaces.htm

从 Oracle 文档中关于多重继承类型的页面,我们可以找到准确的答案。 在这里,我们首先应该知道 java 中的多重继承类型:-

  1. 国家多重继承。
  2. 实施多重继承。
  3. 类别多重继承。

Java“不支持状态多重继承,但它支持自 Java 8发布以来默认方法的实现多重继承和带接口的类型多重继承。

然后这里出现了“菱形问题”以及 Java 如何处理这个问题:-

  1. 如果实现有多重继承,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 {
    
    
    }
    

So here we will get error as:- interface D inherits unrelated defaults for method() from types B and C interface D extends B, C

You can fix it like:-

interface D extends B, C {
@Override
default void method() {
B.super.method();
}
}
  1. 在类型的多重继承中,java 允许这样做,因为 interface 不包含可变字段,而且只有一个实现属于这个类,所以 java 不会给出任何问题,它允许你这样做。

结论: 我们可以说,java 不支持 国家多重继承,但它 确实支持 执行多重继承及类别的多重继承