@Java でのオーバーライド
このガイドでは、Java でのオーバーライドと@override アノテーションのトピックについて詳しく説明します。オーバーライドとは、子クラスがその親クラスと同じメソッドを持つという概念です。この概念は、ランタイムポリモーフィズムの例です。
Java でのオーバーライドとオーバーロードの違い
オーバーライドは、オーバーロードと呼ばれる別の同様の用語と混同されることがよくあります。先に進む前に、次の表でそれらの重要な違いを見てみましょう。
| メソッドのオーバーライド | メソッドのオーバーロード |
|---|---|
| メソッドは同じ名前と署名を持つ必要があります | メソッドの名前は同じで、署名は異なる必要があります |
| ランタイムポリモーフィズムの例です | コンパイル時のポリモーフィズムの例です |
| すべてのメソッドの戻りタイプは同じである必要があります | 返品タイプは同じ場合と同じでない場合があります |
| オーバーライドは 2つ以上のクラス間で発生します | オーバーロードは同じクラスで発生します |
| パラメータは同じである必要があります | パラメータは異なる必要があります |
Java での@Override アノテーション
@Override アノテーションは、スーパークラスのメソッドをオーバーライドすることを Java コンパイラに通知します。プロセスに実装する場合は常に@Override を使用する必要はありませんが、メソッドの作成時に間違いを犯す可能性があるため、これを使用することをお勧めします。たとえば、子クラスにさまざまなパラメーターを指定すると、オーバーライドではなくオーバーロードになります。
間違いを克服するために、子クラスのメソッド名の上に@Override を使用して、メソッドをオーバーライドすることをコンパイラーに通知します。間違えると、コンパイラはエラーをスローします。
以下の例では、4つのクラスがあります。OverrideJava クラスは、main() メソッドがあり、他のクラスのメソッドがそれらのオブジェクトを使用して呼び出される場所です。次に、他に 3つのクラスがあり、FirstClass には method1() というメソッドがあり、内部にメッセージが出力されます。最後に、SecondClass クラスは、継承の概念を使用する FirstClass を拡張します。ここでは、FirstClass のような親クラスと同じメソッド名とシグネチャ method1() を使用します。
SecondClass クラスでは、@Override アノテーションを使用していることに注意してください。次に、ThirdClass クラスの SecondClass を拡張し、アノテーション付きの method1() メソッドを使用します。どのメソッドが呼び出されるかを確認するために、子クラスである ThirdClass のオブジェクトを作成し、method1() を呼び出します。出力では、子が親の後に内部実装を変更したため、ThirdClass 内のメソッドが呼び出されていることがわかります。
public class OverrideJava {
public static void main(String[] args) {
ThirdClass thirdClass = new ThirdClass();
thirdClass.method1();
}
}
class ThirdClass extends SecondClass {
@Override
void method1() {
System.out.println("Overriding method1 in Third Class");
}
}
class SecondClass extends FirstClass {
@Override
void method1() {
System.out.println("Overriding method1 in Second Class");
}
}
class FirstClass {
void method1() {
System.out.println("This is method1");
}
}
出力:
Overriding method1 in Third Class
子クラスの代わりに親クラスの method1() を呼び出したい場合は、そのスーパークラスの method1() を呼び出す super.method1() を使用できます。出力は、最初に ThirdClass 内で、SecondClass のメソッドであるその親クラスが呼び出され、次にそれ自体の実装が呼び出されることを示しています。
public class OverrideJava {
public static void main(String[] args) {
ThirdClass thirdClass = new ThirdClass();
thirdClass.method1();
}
}
class ThirdClass extends SecondClass {
@Override
void method1() {
super.method1();
System.out.println("Overriding method1 in Third Class");
}
}
class SecondClass extends FirstClass {
@Override
void method1() {
System.out.println("Overriding method1 in Second Class");
}
}
class FirstClass {
void method1() {
System.out.println("This is method1");
}
}
出力:
Overriding method1 in Second Class
Overriding method1 in Third Class
Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.
LinkedIn