【发布时间】:2014-05-22 15:01:50
【问题描述】:
有效代码:
interface Int1{
String str = "123";
}
class Pparent{
String str = "123";
}
class F extends Pparent implements Int1{
}
无效代码
在F类中添加main方法:
class F extends Pparent implements Int1{
public static void main(String[] args) {
System.out.println(str);
}
}
出局
Exception in thread "main" java.lang.Error: Unresolved compilation problem: The field str is ambiguous at test.core.F.main(NullReferenceTest.java:45)
我认为这两种变体之间没有显着差异。 我准备 scjp 并要求澄清所有相关情况。当我看到熟悉的问题时,我一头雾水。
你能澄清一下共同的规则吗?
【问题讨论】:
-
@Sotirios Delimanolis ideone.com/gMqUpe
-
@Sotirios Delimanolis 在链接中写道 编译器! 说 对 str 的引用不明确,Pparent 中的变量 str 和 Int1 中的变量 str 匹配
-
@Sotirios Delimanolis 在我的问题中:未解决的编译问题*。我认为线程 main 中的异常 - 它是 eclipse 包装器)Eclipse - 坏男孩)
-
@SotiriosDelimanolis:并不是编译的类不同步。即使编译失败,Eclipse 仍然会发出类文件,并允许您尝试运行代码(通常带有警告对话框)。
-
@JonSkeet 我明白了。我认为它是在使用没有字段的接口编译时发生的。然后添加字段,重新编译接口并尝试运行该类。我意识到如果类在没有接口字段的情况下编译,它将引用字节码中的实例字段,所以我的建议不会发生。
标签: java inheritance interface field implementation