gpt4 book ai didi

java - 静态方法的行为与其他可以重写的方法类似

转载 作者:行者123 更新时间:2023-12-02 04:45:04 24 4
gpt4 key购买 nike

在子类的对象上,父类(super class)的静态方法可用,但是当我们在子类中定义相同的方法时,现在子类的对象开始指向子类方法。这听起来像是覆盖,但事实并非如此,因为静态方法不能重写。这是如何发生的以及 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 如何管理它?由于我的垃圾平板电脑,我很抱歉造成这种情况。

最佳答案

A延伸BA 的一个实例(通过调用 new A() 创建)将具有所有方法,其中 B有。因此,如果您调用.method()A 的实例上,VM 会查找 method()首先在它自己的范围内,即 A 内的动态方法,然后是B内的动态方法,然后是 A 中的静态方法最后是 B 中的静态方法。这是可能的,因为 VM 允许通过 this 访问静态方法。引用,尽管不鼓励这样做,因为它会损害可读性。

关于java - 静态方法的行为与其他可以重写的方法类似,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29722682/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com