在静态方法重写的情况下..我在下面的代码中开发了此方法
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)
的方法是静态方法可能是有道理的杀人罪的依据。