2017-05-31 55 views
1

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

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 
+0

***扩展子类***亲爱的上帝为什么? –

+0

对不起错误的程序...纠正它 –

回答

0

代码未编译

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

你要做的

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

由于静态方法是restricte d只类...

不是真的,该方法是公开的,因此StaticMethodEg类可以访问这个方法呢!

0

不,publicstatic方法可用于任何地方,不仅在课堂上就在被宣布。

static方法也继承(如非静态方法),见this question以获取更多信息。在你的情况下,MyStaticMethodStaticMethodEg类继承,因为它extends Superclass

+0

感谢兄弟清除疑惑.. –

0

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

StaticMethodEg.MyStaticMethod(2313123)是合法的,但是的确会让人产生误解,因为它可能给人的印象是StaticMethodEg类有隐藏父级的静态方法的MyStaticMethod(int)。但事实并非如此。

Superclass.MyStaticMethod(2313123)更清楚。

+0

Ohk意味着我所做的是适用的,但不应该是有效的...还进一步继续我发现,扩展StaticMethodEg类的子类也打印MyStaticMethod(2313123 );方法。子类的子类也打印超类的方法。 –

相关问题