【发布时间】:2017-07-02 05:20:55
【问题描述】:
我找到的答案之一是“如果属于两个不同类的两个方法/变量具有相同的名称,多重继承会导致冲突”。但我认为在实现多个接口时也可能存在冲突。例如,考虑一个实现两个具有相同变量名的接口的类(变量可以在接口中定义,默认情况下它们是最终的)在它们内部声明
interface Ainterface {
public final static int i=10;
}
class InterfaceCheck implements Ainterface {
public static void main(String[] args) {
System.out.println(i);
}
}
上面的代码运行良好
interface Ainterface {
public final static int i=10;
}
interface Binterface {
public static final int i=20;
}
class InterfaceCheck implements Ainterface,Binterface {
public static void main(String[] args) {
System.out.println(i);
}
}
根据互联网上的消息来源“实现多个接口永远不会导致冲突” 但是上面的代码会产生错误。所以这就是我所说的冲突。
【问题讨论】:
-
当同一个基类通过不同的继承链被多次继承时,事情变得复杂了。这是 Java 的设计者不想涉及的事情。因此限制只继承一个类。最有趣的多重继承应用可以从接口中获得。
-
@chirag 正如我在发布的答案中提到的,定义的方法或字段将显示冲突。由于字段是静态的,您可以在 println() 中安全地使用 Ainterface.i 或 Binterface.i。如果它是函数式接口的默认方法,它会在多重继承接口时显示编译错误,并且不允许两个接口被多重继承。
-
@ChiragJain 很高兴你分析了所有细节,我记得当我阅读 Khalid 的 java 时我也是这么想的。即使在这里,如果您在不使用 InterfaceName.i 的情况下访问公共字段,也会出现编译错误!如果您不访问模棱两可的字段,那么您在编译和运行时都很好。如果您喜欢 ans,请点赞。使用 Outer-Inner 类时也会出现同样的问题。
-
是的,这个示例错误,正如您所料。确实有冲突。但毫无疑问。你有什么问题?
-
@Nitish 由于声誉低,我无法投票。
标签: java inheritance interface