著者のホームページ:デザイナー Xiao Zheng
著者の簡単な紹介: JAVA テクノロジ、システム カスタマイズ、リモート ガイダンスに重点を置いた 3 年間の JAVA フルスタック開発経験、エンタープライズ デジタル トランスフォーメーションに専念、CSDN カレッジおよび Blue Bridge クラウド コースの認定講師。
主な方向性: Vue、SpringBoot、WeChat アプレット
この記事では、Java でのメソッド書き換えの概念と優先順位を説明し、サンプル コードを示します。
1. メソッド書き換えとは何ですか
メソッドのオーバーライドは、Java でポリモーフィズムを実現するためのメカニズムです。サブクラスが親クラスから継承する場合、サブクラスは親クラスの既存のメソッドをオーバーライドして、独自の特定のロジックまたは動作を実装できます。メソッドをオーバーライドするには、サブクラスのメソッドが、スーパークラスでオーバーライドされたメソッドと同じメソッド名、パラメーター リスト、戻り値の型を持つ必要があります。
メソッド書き換えの特徴は以下の通り4 44時、しっかり勉強してください。
- サブクラス内のオーバーライドされたメソッドは、スーパークラス内のオーバーライドされたメソッドと同じメソッド シグネチャを持つ必要があります。
- オーバーライドするメソッドのアクセス修飾子は、オーバーライドされるメソッドのアクセス修飾子よりも制限を厳しくすることはできません。たとえば、親クラスのメソッドが の場合
public
、サブクラスによってオーバーライドされるメソッドも でなければなりませんpublic
。 - オーバーライドするメソッドは、オーバーライドされるメソッドよりも広い例外を宣言することはできませんが、より狭い例外を宣言することも、例外をスローしないこともできます。
- オーバーライドするメソッドは、オーバーライドされるメソッドよりも狭いアクセス修飾子を使用できません。たとえば、スーパークラスのメソッドが の場合
protected
、サブクラスのオーバーライドされるメソッドはprotected
またはにすることができますpublic
が、 は使用できませんprivate
。
メソッドの書き換えの目的は、継承関係において、サブクラスが独自のニーズに応じて親クラスのメソッドをカスタマイズして、より柔軟で具体的な機能を実現できることです。書き換えメソッドは、実行時に呼び出すメソッドを動的に決定します。実装されたポリモーフィック機能。
次に、なぜメソッドの書き換えを使用する必要があるのか
Java でメソッド オーバーライドを使用する主な理由は、ポリモーフィズムとコードの柔軟性を実現するためです。
- ポリモーフィズム: メソッドの書き換えは、ポリモーフィズムを実現するための重要な手段の 1 つです。サブクラスが親クラスを継承し、親クラスのメソッドを書き換えると、親クラス参照を通じてサブクラス オブジェクトを指し、実際のオブジェクト タイプに応じて、書き換えられた対応するメソッドを呼び出すことができます。これにより、プログラムは実行時にオブジェクトに応じて異なる動作を行うことができます。
- 柔軟性: メソッドの書き換えにより、サブクラスは独自のニーズに応じて親クラスのメソッドをカスタマイズできます。サブクラスは親クラスのメソッドを書き換えて、特定のビジネス ニーズに応じて特定の機能を実現できます。これにより、コードの柔軟性と拡張性が向上し、プログラムの保守と拡張が容易になります。
また、メソッドを書き換えることでコードの読みやすさや理解しやすさも向上し、親クラスのメソッドをサブクラスで書き換えることで、コードの意味論的かつ論理的なものとなり、プログラムが理解しやすくなります。
つまり、メソッドの書き換えは、ポリモーフィズムを実現し、コードの柔軟性と可読性を向上させ、Java プログラムをより柔軟でスケーラブルで理解しやすくするための重要な手段です。
3. メソッド書き換え優先度問題
Java では、メソッドのオーバーライドの優先順位は継承関係に基づいています。
サブクラスが親クラスのメソッドをオーバーライドする場合、メソッドを呼び出すときに、サブクラス内のオーバーライドされたメソッドが最初に呼び出されます。
以下は、メソッド書き換えの優先順位を示す簡単なサンプル コードです。注意深く検討してください。
class Animal {
public void makeSound() {
System.out.println("Animal makes sound");
}
}
class Dog extends Animal {
@Override
public void makeSound() {
System.out.println("Dog barks");
}
}
public class Main {
public static void main(String[] args) {
Animal animal = new Animal();
animal.makeSound(); // Output: "Animal makes sound"
Dog dog = new Dog();
dog.makeSound(); // Output: "Dog barks"
Animal animal2 = new Dog();
animal2.makeSound(); // Output: "Dog barks"
}
}
上記の例では、Animal クラスにmakeSound()
メソッドがあり、Dog クラスが Animal クラスを継承してmakeSound()
メソッドをオーバーライドします。メソッドではmain()
AnimalクラスとDogクラスのオブジェクトをそれぞれ作成し、そのmakeSound()
メソッドを呼び出します。
animal
オブジェクトがメソッドを呼び出すとmakeSound()
、Animal クラスのメソッドmakeSound()
、outputが呼び出されますAnimal makes sound
。
dog
オブジェクトがメソッドを呼び出すと、 Dog クラスのmakeSound()
オーバーライドされたメソッド、 Output が呼び出されます。makeSound()
Dog barks
animal2
オブジェクト (Dog タイプのオブジェクトを指す Animal タイプの参照変数) がメソッドを呼び出すと、makeSound()
ポリモーフィズムの特性により、makeSound()
Dog クラスのオーバーライドされたメソッド、 Outputも呼び出されますDog barks
。
これは、メソッドの書き換えでは、メソッド呼び出しが変数の型ではなく、オブジェクトの実際の型に基づいているため、サブクラスによって書き換えられたメソッドが最初に呼び出されることを示しています。
4. 面接の質問を書き直す方法
- メソッドのオーバーライドとは何ですか? 例を挙げてください。
- メソッドのオーバーライドとメソッドのオーバーロードの違いは何ですか?
- メソッドのオーバーライドに関するルールは何ですか?
- 親クラスのメソッドが の場合
private
、サブクラスでオーバーライドできますか? - サブクラスが親クラスのメソッドをオーバーライドする場合、親クラスのメソッド宣言よりも広い例外をスローできますか?
- 親クラスの静的メソッドをサブクラスでオーバーライドできますか?
- 親クラスのメソッドが の場合
final
、サブクラスでオーバーライドできますか? - オーバーライドされたメソッドを呼び出すとき、親クラスのメソッドを呼び出しますか、それともサブクラスのメソッドを呼び出しますか?
- サブクラスのオーバーライドされたメソッドを親クラスで呼び出すことはできますか?
- メソッドのオーバーライドとポリモーフィズムとの関係は何ですか?
V. まとめ
この記事では、Java におけるメソッド書き換えの概念と優先順位、サンプルコードを説明し、次回のブログでは Java における静的コード ブロックの知識ポイントを説明します。