首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >一个接口能在Java中扩展多个接口吗?

一个接口能在Java中扩展多个接口吗?
EN

Stack Overflow用户
提问于 2013-10-23 15:45:48
回答 7查看 148K关注 0票数 156

一个接口能在Java中扩展多个接口吗?此代码在我的IDE中显示为有效,它确实编译:

代码语言:javascript
运行
复制
interface Foo extends Runnable, Set, Comparator<String> { }

但我听说Java中不允许多次继承。为什么会出现接口异常呢?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2013-10-23 15:47:06

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

代码语言:javascript
运行
复制
interface Maininterface extends inter1, inter2, inter3 {  
  // methods
}

一个类也可以实现多个接口。如果两个接口都有一个定义相同名称和签名的方法,该怎么办?

有一个棘手的问题:

代码语言:javascript
运行
复制
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

票数 202
EN

Stack Overflow用户

发布于 2013-10-23 15:49:06

接口可以扩展多个接口

可以实现多个接口

但是,只能扩展单个类

在谈论extendsclass时,注意如何使用interfaceclass这两个词。

票数 85
EN

Stack Overflow用户

发布于 2018-10-07 08:29:09

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

  1. 国家的多重继承。
  2. 实现的多重继承。
  3. 类型的多重继承。

Java“不支持状态的多重继承,但是它通过默认方法支持实现的多重继承,因为java 8发布了,并且有接口的类型的多重继承。

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

  1. 在实现多重继承的情况下,java编译器会给出编译错误,并要求用户通过指定接口名来修复它。例如:- 接口A{ void ();}接口B扩展A{@重写默认的空洞方法(){ System.out.println("B");}接口C扩展A{@重写默认的空洞方法(){ System.out.println("C");}接口D扩展B,C{}

所以这里我们将得到错误,因为:-接口D从类型B继承了与方法()无关的缺省值,而C接口D继承了B,C

你可以像:-

代码语言:javascript
运行
复制
interface D extends B, C {
                @Override
                default void method() {
                    B.super.method();
                }
            }
  1. 在多类型继承中,java允许它这样做,因为接口不包含可变字段,而且只有一个实现属于类,所以java不会产生任何问题,并且允许您这样做。

总之,我们可以说java 不支持的状态多重继承,但是支持实现的多重继承和类型的多重继承。

票数 18
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19546357

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档