@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