为什么在java中,接口中的静态最终变量可以被本地var覆盖?

Med*_* Gh 0 java static final interface

我知道静态意味着,内存中只有一个实例.我知道final意味着它不能被改变或子类化,我也知道在java接口中定义的任何变量都是静态final

所以现在问题是,为什么我可以在"XFace"类的界面"MyFace"中超越最终的静态变量"a"?

例:

public interface MyFace {
    static final int a = 15;

    void smile();
}
Run Code Online (Sandbox Code Playgroud)

然后在课堂上,我可以轻松地骑过a,与当地人一起,

public class XFace implements MyFace {

    @Override
    public void smile() {
        int a=3;  // over riding interface's a variable and suprsingly it works !
        System.out.println(a*2);  // will print 6
    }
Run Code Online (Sandbox Code Playgroud)

为什么我可以在smile()方法中定义int a = 3?是不是"一个"最终和静态?它怎么可能被覆盖?

chr*_*ke- 12

它没有被覆盖,它是阴影,意味着有一个更接近的变量,同一个简单的名称优先.您仍然可以使用static final更长的名称MyFace.a.

  • "通过使用类名来限定它"是合适的. (2认同)