这是我正在处理的代码:
class Animal {
public void hide() {
System.out.println("The hide method in Animal.");
}
public void override() {
System.out.println("The override method in Animal.");
}
public static void clank()
{
System.out.println("Clank in Animal");
}
}
和
public class Cat extends Animal {
public void hide() {
System.out.println("The hide method in Cat.");
}
public void override() {
System.out.println("The override method in Cat.");
}
public static void clank()
{
System.out.println("Clank in Cat");
}
public static void main(String[] args) {
Cat myCat = new Cat();
Animal myAnimal = new Cat();
myAnimal.hide();
myAnimal.override();
myAnimal.clank();
}
}
此代码的输出为:
The hide method in Cat.
The override method in Cat.
Clank in Animal
为什么将两个clank方法声明为静态不允许覆盖Animal中的clank?输出应该是“Clank in Cat”吗?谢谢!
答案 0 :(得分:0)
静态方法是类方法,它们不需要调用任何实例。在编译期间始终解决对它们的访问。因此,在这种情况下,由于myAnimal
的编译时类型为Animal
,因此调用myAnimal.clank()
等于Animal.clank()
。但是,如果您撰写Cat myAnimal = new Cat();
然后致电myAnimal.clank()
,您将获得Clank in Cat
。
静态方法,在声明中包含static修饰符, 应该使用类名调用,而无需创建 类的实例
注意:您还可以使用对象引用来引用静态方法 像
instanceName.methodName(args)
一样,但这是不鼓励的,因为它 并不清楚他们是阶级方法。