Java でのオーバーライドと非表示の違いについて、私は混乱しています。これらがどのように異なるかについて、誰でも詳細を提供できますか? Java チュートリアルを読みましたが、サンプル コードは依然として混乱を招きました。
より明確にするために、私はオーバーライドをよく理解しています。私の問題は、一方がインスタンス レベルにあり、もう一方がクラス レベルにあるという事実を除いて、非表示がどのように違うのかがわからないことです。
Java チュートリアル コードを見ると、次のようになります。
public class Animal {
public static void testClassMethod() {
System.out.println("Class" + " method in Animal.");
}
public void testInstanceMethod() {
System.out.println("Instance " + " method in Animal.");
}
}
次に、サブクラスがありCat
ます。
public class Cat extends Animal {
public static void testClassMethod() {
System.out.println("The class 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();
}
}
それから彼らは言う:
このプログラムの出力は次のとおりです。
アニマルのクラスメソッド。
Cat のインスタンス メソッド。
私にとって、クラス メソッドをクラスtestClassMethod()
から直接呼び出すとクラスAnimal
内でメソッドが実行されるという事実Animal
は明らかであり、特別なことは何もありません。testInstanceMethod()
次に、 への参照からを呼び出すmyCat
ので、そのときに実行されたメソッドが のインスタンス内のものであることは明らかですCat
。
私が見たところ、呼び出しの非表示はオーバーライドと同じように動作しますが、なぜその区別をするのでしょうか? 上記のクラスを使用してこのコードを実行すると:
Cat.testClassMethod();
取得します:
Cat のクラス メソッド。
しかし、Cat から を削除すると、次のtestClassMethod()
ようになります
。 Animal のクラス メソッド。
これは、親と同じシグネチャを持つ静的メソッドをサブクラスに記述すると、オーバーライドがほとんど行われることを示しています。
うまくいけば、私が混乱している場所を明確にし、誰かが光を当てることができます. よろしくお願いします!