来自Java中静态上下文的模糊调用

use*_*844 17 java static non-static ambiguous

main方法尝试访问var,但会导致调用模糊.为什么?无论如何,无法从静态上下文访问(可见?)Base1中的实例变量var.

  class Base1 {
      int var;
  }

  interface Base2 {
      public static final int var = 0;
  }

  class Test extends Base1 implements Base2 { 
      public static void main(String args[]) {
          System.out.println("var:" + var); 
      }
  }
Run Code Online (Sandbox Code Playgroud)

Sot*_*lis 17

字段访问歧义JLS规则

如果标识符在类型中命名了几个可访问的(§6.6)成员字段T,则字段访问是不明确的,并且发生编译时错误.

无障碍的主题

只有在类型可访问且声明成员或构造函数允许访问时,才能访问引用类型的成员(类,接口,字段或方法)或类类型的构造函数:

它没有区分实例字段访问是否会在static上下文中导致编译错误.

请注意,你可能有

public static void main(String args[]) {
    Test test = new Test();
    System.out.println("var:" + test.var); 
}
Run Code Online (Sandbox Code Playgroud)

你仍然有歧义.