Ambiguous call from static context in Java
ambiguous, java, non-static, static
Solution
The JLS rule for field access ambiguity is
If the identifier names several accessible (§6.6) member fields in type `T`, then the field access is ambiguous and a compile-time error occurs.
And on the subject of accessibility
A member (class, interface, field, or method) of a reference type, or a constructor of a class type, is accessible only if the type is accessible and the member or constructor is declared to permit access:
It doesn't make a distinction about whether the instance field access would cause a compile error in a `static` context.
Note that you could have had
public static void main(String args[]) {
Test test = new Test();
System.out.println("var:" + test.var);
}
You'd still have the ambiguity.
Problem
The main method tries to access var, but results in ambiguous call. Why? Instance variable var in Base1 isn't accessible (visible?) from static context anyway. ``` 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); } } ```