147

一个接口可以在Java中扩展多个接口吗?此代码在我的 IDE 中显示有效,并且可以编译:

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

但我听说 Java 中不允许多重继承。为什么接口似乎有例外?

4

7 回答 7

197

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

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

于 2013-10-23T15:47:06.997 回答
80

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

一个可以实现多个接口

但是,一个只能扩展一个类

小心你如何使用这些词extends以及implements在谈论interfaceand时class

于 2013-10-23T15:49:06.883 回答
11

从关于多重继承类型的 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 {
    
                }
    

所以在这里我们会得到错误:- 接口 D 继承了 B 和 C 类型的 method() 的不相关默认值接口 D 扩展 B、C

你可以像这样修复它: -

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

在结论中,我们可以说 java不支持 state 的多重继承,但它确实支持 implementation 的多重继承和 type 的多重继承

于 2018-10-07T08:29:09.593 回答
9

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

答案是:是的。

根据JLS

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

于 2013-10-23T15:46:42.007 回答
4

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

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

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

于 2013-10-23T15:49:17.013 回答
2

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

于 2013-10-23T15:50:36.533 回答
2

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

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

于 2013-10-23T15:50:37.617 回答