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

时间:2013-10-23 15:45:49

标签: java inheritance multiple-inheritance extends

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

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

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

7 个答案:

答案 0 :(得分:157)

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

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

答案 1 :(得分:69)

界面可以扩展多个界面

可以实现多个接口

但是,只能扩展单个类

在谈论extendsimplements时,请小心谨慎使用interfaceclass字样。

答案 2 :(得分:8)

  

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

答案是:是。

根据JLS

  

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

答案 3 :(得分:3)

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

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

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

答案 4 :(得分:2)

  

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

例如,请看一下:http://www.tutorialspoint.com/java/java_interfaces.htm

答案 5 :(得分:2)

在有关多重继承类型的Oracle文档页面上,我们可以找到准确的答案here。 在这里,我们首先应该知道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 不支持 状态的多重继承,但它支持 实现的多重继承和类型的多重继承

答案 6 :(得分:1)

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