关于静态方法覆盖

dgh*_*htr 0 java static-methods overriding

在静态方法覆盖的情况下..我已经开发了以下代码

class Ab {  
    static void getF() {
        System.out.println("I am saral");
    }
}

class Ham extends Ab {
    static void getF() {
        System.out.println("I am saral saxena");
    }
    public static void main(String[] args) {
        // Ham h = new Ham();
        // h.getF(); //Ham
        Ab a = new Ham();
        a.getF(); // Ab class
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我的查询是,当我使用多态行为时,Ab a = new Ham();在静态方法覆盖的情况下,在这个阶段我仍然得到getF();类的方法Ab,请指教.

Boh*_*ian 5

不能覆盖静态方法.

静态方法属于类.您可以打电话Ab.getF()Ham.getF()- 您在编码时选择了哪个.

在类层次结构中命名相同的静态方法没有任何影响(除了程序员可能的混淆).静态方法是属于类的浮动代码,而不是实例.只有实例方法对覆盖敏感.

出于这个原因,在实例上调用静态方法(就像你一样)是不好的风格,因为它使得该方法看起来像是一个实例方法.这是允许的语言,但导致程序员混淆,因此导致错误,特别是如果静态方法具有类似实例方法的名称 - 例如,发现名为setName(String)静态方法的方法可能是合理杀人的理由.