gpt4 book ai didi

java - 为什么叫它 "method hiding"?

转载 作者:搜寻专家 更新时间:2023-10-31 19:32:28 27 4
gpt4 key购买 nike

来自docs , "如果子类定义了一个与父类(super class)中的静态方法具有相同签名的静态方法,那么子类中的方法将隐藏父类(super class)中的方法。"

我理解方法隐藏和覆盖之间的区别。但是,说子类隐藏了父类(super class)的方法就很奇怪了,因为如果你有以下情况:

public class Cat extends Animal {
public static void testClassMethod() {
System.out.println("The static method in Cat");
}
public void testInstanceMethod() {
System.out.println("The instance method in Cat");
}

public static void main(String[] args) {
Cat myCat = new Cat();
Animal myAnimal = myCat;
Animal.testClassMethod();
myAnimal.testInstanceMethod();
}
}

父类(super class)的静态方法被调用。但是根据隐藏的定义,子类中的方法隐藏了父类(super class)中的方法。我看不出子类是如何“掩盖/隐藏”父类(super class)静态方法的,因为父类(super class)的方法是实际调用的方法。

最佳答案

The superclass's static method is called.

是的。但那是因为您通过在调用语句中使用父类(super class)名称限定来显式命名父类(super class)的静态方法。

如果您改为这样编写 main:

public static void main(String[] args) {
...
testClassMethod();
}

那么您会看到 testClassMethodCat 版本被调用了。这里,Cat.testClassMethod 方法隐藏了 Animal.testClassMethod 方法

关于java - 为什么叫它 "method hiding"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33666148/

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