在静态方法重写的情况下..我在下面的代码中开发了此方法

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
    }
}


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

最佳答案

您不能覆盖静态方法。

静态方法属于类。您可以调用Ab.getF()Ham.getF()-在编码时选择哪个。

在类层次结构中对静态方法进行相同的命名不会产生任何影响(除了可能给程序员带来混乱之外)。静态方法是属于类而不是实例的代码的浮动位。仅实例方法对覆盖敏感。

因此,在实例上调用静态方法(如您所愿)的风格很差,因为它使该方法看起来像是实例方法。它在语言中是允许的,但会引起程序员的困惑,并因此引起错误,尤其是在静态方法的名称类似于实例方法的情况下-例如,发现名为setName(String)的方法是静态方法可能是有道理的杀人罪的依据。

09-10 07:31
查看更多