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,请指教.
您不能覆盖静态方法.
静态方法属于类.您可以打电话Ab.getF()或Ham.getF()- 您在编码时选择了哪个.
在类层次结构中命名相同的静态方法没有任何影响(除了程序员可能的混淆).静态方法是属于类的浮动代码,而不是实例.只有实例方法对覆盖敏感.
出于这个原因,在实例上调用静态方法(就像你一样)是不好的风格,因为它使得该方法看起来像是一个实例方法.这是允许的语言,但导致程序员混淆,因此导致错误,特别是如果静态方法具有类似实例方法的名称 - 例如,发现名为setName(String)静态方法的方法可能是合理杀人的理由.
| 归档时间: |
|
| 查看次数: |
183 次 |
| 最近记录: |