为什么我的静态块允许在不使用父类引用的情况下调用父类静态方法?

ama*_*ish 3 java static-methods static-block

根据我的理解,通常应该使用类的引用来调用静态方法,或者如果它在静态方法或静态块中,则可以在没有引用的情况下直接调用它.

但是,当从子类静态块调用静态方法时,这是否适用?

为什么它允许这样的东西,因为静态方法不是继承的,它应该只允许使用父类名吗?

public abstract class abs {

    /**
     * @param args
     */
    abstract void m();
    static void n(){
        System.out.println("satic method");
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub

    }

}
class myclass extends abs{

    @Override
    void m() {
        // TODO Auto-generated method stub

    }
    static{
        n();
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么我的子类静态块可以调用没有引用或类名的父类静态方法?

孙兴斌*_*孙兴斌 5

静态方法n()由子类继承myclass,因此可以直接在静态块中调用它myclass.

  • "与继承的静态(类)方法和继承的非静态(实例)方法的唯一区别在于,当您使用相同的签名编写新的静态方法时,旧的静态方法只是隐藏,而不是被覆盖." 这是有道理的 (2认同)