静态方法表现得像其他可以覆盖的方法
static method behaving like other method those can override
在childclass的object上,superclass的静态方法是可用的,但是当我们在child[=22=中定义相同的方法时], 现在 child class 的 object 开始指向 child class method.this 完成听起来像是覆盖,但事实并非如此,因为静态方法可以'覆盖。这是怎么发生的,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");
}
}
这似乎是压倒性的,但 not.how jdk 管理它?
由于我的垃圾平板,我很抱歉。
由于 A
扩展了 B
,A
的实例(您通过调用 new A()
创建)将拥有 B
具有的所有方法.因此,如果您在 A
的实例上调用 .method()
,VM 首先在其自己的范围内查找 method()
,即 A
中的动态方法,然后是动态方法B
中的方法,然后是 A
中的静态方法,最后是 B
中的静态方法。这是可能的,因为 VM 允许通过 this
引用访问静态方法,尽管不鼓励这样做,因为它会影响可读性。
在childclass的object上,superclass的静态方法是可用的,但是当我们在child[=22=中定义相同的方法时], 现在 child class 的 object 开始指向 child class method.this 完成听起来像是覆盖,但事实并非如此,因为静态方法可以'覆盖。这是怎么发生的,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");
}
}
这似乎是压倒性的,但 not.how jdk 管理它? 由于我的垃圾平板,我很抱歉。
由于 A
扩展了 B
,A
的实例(您通过调用 new A()
创建)将拥有 B
具有的所有方法.因此,如果您在 A
的实例上调用 .method()
,VM 首先在其自己的范围内查找 method()
,即 A
中的动态方法,然后是动态方法B
中的方法,然后是 A
中的静态方法,最后是 B
中的静态方法。这是可能的,因为 VM 允许通过 this
引用访问静态方法,尽管不鼓励这样做,因为它会影响可读性。