在子类的对象上,可以使用超类的静态方法,但是在子类中定义相同的方法的时候,现在子类的对象开始指向子类方法。这个完整听起来像重写但是不是,因为静态方法无法覆盖。如何实现这一点以及java的这个功能被称为什么?
class A extends B {
public static void main(String[] args) {
new A().method();//call class B's method if method is not in A otherwise A's
}
/*
public static void method(){
System.out.println("class A method");
*/
}
class B {
public static void method() {
System.out.println("class B method");
}
}
这似乎是压倒一切但不是jdk管理它? 由于我的垃圾片,我很抱歉。
答案 0 :(得分:2)
自A
扩展B
以来,A
的实例(您通过调用new A()
创建)将包含B
所拥有的所有方法。因此,如果您在.method()
的实例上调用A
,则VM会在其自己的范围内首先查找method()
,即A
中的动态方法,然后是dyanmic B
中的方法,然后是A
中的静态方法,最后是B
中的静态方法。这是可能的,因为VM允许通过this
引用访问静态方法,但这是不鼓励的,因为它会影响可读性。