访问子类中的超类静态方法

时间:2017-05-31 15:46:04

标签: java static-methods

由于静态方法仅限于类,为什么子类使用下面代码中超类的静态方法?

public class StaticMethodEg extends Superclass {
    public static void main(String args[]) {
        System.out.println(StaticMethodEg.MyStaticMethod(2313123));
    }
}

class Superclass {
    public static int MyStaticMethod(int i) {
        Integer value = new Integer(i);
        return value + 1234;
    }
}

输出

2314357

3 个答案:

答案 0 :(得分:0)

您的代码未编译

 System.out.println(StaticMethodEg.MyStaticMethod(2313123));

你必须这样做

System.out.println(Superclass.MyStaticMethod(2313123));
  

由于静态方法仅限于类...

不是真的,该方法是公开的,所以 StaticMethodEg 类也可以访问该方法!

答案 1 :(得分:0)

不, public static方法可以在任何地方使用,不仅可以在声明的类中使用。

static方法也是继承的(如非静态方法),有关详细信息,请参阅this question。在您的情况下,MyStaticMethod类会继承StaticMethodEg,因为它extends Superclass

答案 2 :(得分:0)

静态方法是可继承的但不可覆盖 因此,子类参见父类的公共静态方法。

StaticMethodEg.MyStaticMethod(2313123)是合法的,但确实具有误导性,因为它可能会让人觉得StaticMethodEg类有MyStaticMethod(int)隐藏父级的静态方法。但事实并非如此。

Superclass.MyStaticMethod(2313123)更清楚。