Animal のメソッドを本当に呼び出したい場合で、静的メソッドを使用できる場合は、オーバーライドの代わりに非表示を使用できます。
次のように動作します: 静的メソッドの場合のみ、呼び出されるメソッドは、オブジェクト インスタンスではなく、宣言された typeに関連するメソッドです。つまり、メソッドはインスタンス メソッドではなくクラス メソッドであるため、クラスに従います。
このページから改作された例:
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();
}
}
結果は次のようになります (1 行目と 2 行目ではなく、3 行目と 4 行目に注意してください)。
The instance method in Kangaroo.
The instance method in Kangaroo.
The class method in Kangaroo.
The class method in Animal.