以下是代码:
public class MyClass implements Inreface1, Inreface2 {
public MyClass() {
System.out.println("name is :: " + name);
}
public static void main(String[] args) {
new MyClass();
}
}
//Interface1
public interface Inreface1 {
public String name="Name";
}
//Interface2
public interface Inreface2 {
public String name="Name";
}
以下是导致的错误:
字段名称不明确
有什么问题?什么是模棱两可的?
答案 0 :(得分:7)
您的类正在实现两个接口,并且在这两个接口上定义了变量name
。因此,当您在班级中调用name
时,Java无法确定变量是否引用Interface1.name
或Interface.name
。
这是你代码中的问题......
答案 1 :(得分:1)
类MyClass
实现了两个接口,它们都有一个name
变量。在MyClass
的构造函数中,Java不知道要选择哪个name
- 来自Inreface1
的那个或来自Inreface2
的那个。你可以明确告诉它:
public MyClass() {
System.out.println("name is :: " + Inreface1.name);
}
答案 2 :(得分:1)
看看你的代码:
System.out.println("name is :: " + name);
编译器应使用哪个“名称”?我很暧昧,因为可能是Inreface1.name或Inreface2.name。 如果通过指定一个“名称”来清除歧义,则错误应该消失。例如:
System.out.println("name is :: " + Inreface1.name);
答案 3 :(得分:0)
看起来你指的是同一个变量。
我认为编译器不知道您尝试传递的值。您是否尝试更改字段变量?
答案 4 :(得分:0)
什么是含糊不清的?
如果接口继承了两个具有相同名称的字段 因为,例如,它的两个直接超接口声明了字段 使用该名称,然后会产生一个模棱两可的成员。任何使用 这个模糊的成员将导致编译时错误。因此在 例如:
interface BaseColors {
int RED = 1, GREEN = 2, BLUE = 4;
}
interface RainbowColors extends BaseColors {
int YELLOW = 3, ORANGE = 5, INDIGO = 6, VIOLET = 7;
}
interface PrintColors extends BaseColors {
int YELLOW = 8, CYAN = 16, MAGENTA = 32;
}
interface LotsOfColors extends RainbowColors, PrintColors {
int FUCHSIA = 17, VERMILION = 43, CHARTREUSE = RED+90;
}
接口LotsOfColors继承了两个名为YELLOW的字段。这是 只要接口不包含任何引用,就可以了 简单的名字到黄色领域。 (这样的参考可能发生在 字段的变量初始值设定项。)
即使是界面PrintColors 将值3赋予黄色而不是值8,a 在LotsOfColors界面中引用字段YELLOW仍然是 被认为是模棱两可的。
答案 5 :(得分:0)
另一点是接口中不允许实例变量。您的公共字符串变为常量:public static String name; - 你得到两次。具有相同名称/类型的多个常量肯定是模糊的。