如果您真的想为 Animal 调用您的方法,并且可以使用静态方法,则可以使用隐藏而不是覆盖。
它的工作原理如下:仅对于静态方法,被调用的方法是与声明的类型相关的方法,而不是对象实例。换句话说,它遵循类,因为该方法是类方法,而不是实例方法。
一个例子,改编自这个页面:
public class Animal {
public static void testClassMethod() {
System.out.println("The class" + " method in Animal.");
}
public void testInstanceMethod() {
System.out.println("The instance " + " method in Animal.");
}
}
public class Kangaroo extends Animal {
public static void testClassMethod() {
System.out.println("The class method" + " in Kangaroo.");
}
public void testInstanceMethod() {
System.out.println("The instance method" + " in Kangaroo.");
}
public static void main(String[] args) {
Kangaroo myRoo = new Kangaroo();
Animal myAnimal = myRoo;
myRoo.testInstanceMethod();
myAnimal.testInstanceMethod();
Kangaroo.testClassMethod();
Animal.testClassMethod();
}
}
结果将是(注意第 3 行和第 4 行,而不是第 1 行和第 2 行):
The instance method in Kangaroo.
The instance method in Kangaroo.
The class method in Kangaroo.
The class method in Animal.