Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用定义的字段扩展接口?_Java_Inheritance_Interface - Fatal编程技术网

Java 使用定义的字段扩展接口?

Java 使用定义的字段扩展接口?,java,inheritance,interface,Java,Inheritance,Interface,我有个问题要问你?众所周知,Java中的接口字段也是默认的公共字段、静态字段和最终字段。扩展接口怎么样? 例如,如果我们有一个定义了字段的接口,并且我们创建了另一个扩展了字段接口的接口,我们就不能继承字段,因为它们实际上是静态的,也是最终的。但是我们可以!你能解释一下为什么吗 interface interfaceWithFields{ String name = "Matthew";} interface interfaceWithoutFields extends interfaceWit

我有个问题要问你?众所周知,Java中的接口字段也是默认的公共字段、静态字段和最终字段。扩展接口怎么样? 例如,如果我们有一个定义了字段的接口,并且我们创建了另一个扩展了字段接口的接口,我们就不能继承字段,因为它们实际上是静态的,也是最终的。但是我们可以!你能解释一下为什么吗

interface interfaceWithFields{
String name = "Matthew";}

interface interfaceWithoutFields extends interfaceWithFields{}
当我们调用标准输出方法时,它将返回Matthew:

System.out.println(interfaceWithoutFields.name); //no problem at all

提前感谢您的回复。夜深了,我可能弄糊涂了。

我不确定这是否是技术上的答案,但在这种情况下,它的工作原理与普通课堂的工作原理非常相似。如果从具有公共、静态或最终字段的基类继承,则它也将位于扩展类中。因此,至少在这个意义上,接口以类似的方式工作似乎是合理的。

我不确定这是否是技术上的答案,但在这种情况下,它的工作原理与普通类的工作原理非常相似。如果从具有公共、静态或最终字段的基类继承,则它也将位于扩展类中。因此,至少从这个意义上说,接口以类似的方式运行似乎是合理的。

这是正常的。子类和子接口通常从它们的超类型继承静态成员*

:

接口从其扩展的接口继承这些接口的所有成员,但它隐藏的字段、类和接口除外;其覆盖的抽象或默认方法(§9.4.1);和
静态方法

这里的措辞有点罗嗦,但它说接口继承来自超级接口的静态字段,除非它们不隐藏。(隐藏是指声明具有相同名称的变量。)

实际上,编译器只需将
interfaceWithFields.name
替换为
interfaceWithFields.name
。只有一个静态变量
name


*(奇怪的是,静态方法不是从超级接口继承的。)

这是正常的。子类和子接口通常从它们的超类型继承静态成员*

:

接口从其扩展的接口继承这些接口的所有成员,但它隐藏的字段、类和接口除外;其覆盖的抽象或默认方法(§9.4.1);和
静态方法

这里的措辞有点罗嗦,但它说接口继承来自超级接口的静态字段,除非它们不隐藏。(隐藏是指声明具有相同名称的变量。)

实际上,编译器只需将
interfaceWithFields.name
替换为
interfaceWithFields.name
。只有一个静态变量
name


*(奇怪的是,静态方法不是从SuperInterface继承的。)

OK。我可能弄错了。当然,你写的是真的。就像我写的,已经很晚了。我很抱歉问了一个愚蠢的问题。你从
中得到了相同的行为,为什么
接口
会有任何不同?通过从
interfaceWithFields
扩展,您可以获得它的所有属性是的,我知道。我不小心弄糊涂了。对不起,好的。我可能弄错了。当然,你写的是真的。就像我写的,已经很晚了。我很抱歉问了一个愚蠢的问题。你从
中得到了相同的行为,为什么
接口
会有任何不同?通过从
interfaceWithFields
扩展,您可以获得它的所有属性是的,我知道。我不小心弄糊涂了。“我很抱歉!”保尔·伯丁顿说,直到我刚才查阅了报价单,我才明白这一点。我猜是因为它是新的Java8。“隐藏的奇怪之处!”保尔·博丁顿在我刚才查到这段引文之前,都没有告诉我。我猜是因为它是新的Java8。隐藏的奇怪之处。