为什么编译器没有给super.staticMethod()发出警告

时间:2015-08-05 19:48:27

标签: java static compiler-warnings super eclipse-kepler

我知道我们应该通过类名以静态方式访问静态成员并理解原因(例如,下一个代码,我理解这是不好的做法)。但是为什么当我尝试通过super关键字访问静态方法时,没有编译器警告?考虑一下你有下一个代码:

class Parent {
    static int staticField;
    static void staticMethod() {}
}

class Child extends Parent {
    void testStatic() {
        this.staticMethod(); // warning
        super.staticMethod(); // NO warnings
        new Child().staticMethod(); // warning
        new Parent().staticMethod(); // warning

        this.staticField++; // warning
        super.staticField++; // warning
        new Child().staticField++; // warning
        new Parent().staticField++; // warning
    }
}

所以,问题是为什么编译器不会给行super.staticMethod();

发出警告

1 个答案:

答案 0 :(得分:2)

您的情况称为间接访问静态方法,默认情况下,它的警告关闭。启用它:

  1. 右键单击该项目,转到属性。
  2. Java编译器。
  3. 错误/警告。
  4. 配置工作区设置 enter image description here
  5. 检查(激活)启用项目特定设置。
  6. 间接访问静态方法更改为警告。 enter image description here
  7. 我正在使用eclipse luna,它适用于我