gpt4 book ai didi

Java继承2个接口(interface)方法相同

转载 作者:行者123 更新时间:2023-12-04 05:54:13 25 4
gpt4 key购买 nike

在下面的代码片段中,第一个不编译,但第二个可以。为什么?有什么不同?

1.

public class test {
static interface I1 { I1 m(); }

static interface I2 { I2 m(); }

static interface I12 extends I1,I2 {
public I12 m();
}



}

2.
public class test {
static interface I1 { I1 m(); }

static interface I2 { I2 m(); }

static class I12 implements I1,I2 {
public I12 m(){
return null;
}
}
}

最佳答案

在 Java 1.4 或更早版本中,这两个片段都应该无法编译。在 1.5 或更高版本中,两个版本都应该编译。

如果在 Java 1.4 中重写方法,则必须提供与基类方法完全相同的返回类型。

这个限制在 Java 1.5 和更高版本中被取消了,在这里你可以提供一个继承自基类方法的返回类型的返回类型。

这是有道理的,并且可能很有用。如果你有:

I1 x = new I12Impl();

那么你所知道的就是 x.m() 返回一个 I1。

但是,如果您有更多信息:
I12 x = new I12Impl();

那么你知道 x.m() 返回一个 I12(这也是一个 I1)。

这有时会很方便(例如,您可以在调用 x.m() 时避免沮丧)

关于Java继承2个接口(interface)方法相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9714880/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com