在子类的对象上,可以使用父类的静态方法,但是当我们在子类中定义相同的方法时,现在子类的对象开始指向子类的方法。这听起来像是覆盖了,但并非如此,因为静态方法可以t覆盖。这是怎么发生的,以及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如何管理它?由于我的垃圾平板电脑,我感到抱歉。
由于Aextends B,A(您通过调用创建的new A())实例将具有所有方法B。因此,如果调用.method()的实例A,则VM会method()在其自身范围内首先查找,即内部的动态方法A,然后是内部的dyanmic方法B,然后是内部的静态方法A,最后是B。这是可能的,因为VM允许通过this引用访问静态方法,尽管不建议这样做,因为它会损害可读性。
A
B
new A()
.method()
method()
this