透2017/5/92019/6/7こんにちは!フリーランスの長野です。オーバーライドって使っていますか?すでに存在するクラスのあるメソッドを変更して使いたい場合などに便利ですよね。変更したいメソッドだけを記述し直すだけで、メンバ変数や他のメソッドをあらためて記述する必要がないのが便利です。使用する上での決まり事など基本的な内容から、応用的な内容についても解説していきます。まとめオーバーライドとはオーバーライドとはクラスを継承する時に、スーパークラスのメソッドをサブクラスにおいて同じメソッド名で定義し直すことを言います。オーバーライドする際には、メソッド名を同じにする必要があるのに加えて、メソッドの引数は同じ数、同じ順番にする必要があります。ちなみに、スーパークラスとは継承され親となるクラスのことで、サブクラスとは継承したクラスのことです。「super」句を使うと、オーバーライドした場合でもスーパークラスで定義したメソッドを変更せずにそのまま使用することも可能です。使用するメリットオーバーライドは継承したサブクラスのメソッドで使用します。そもそも継承するメリットですが一言で言うと、再利用できて、書く記述量を減らすことができるという点です。変更が必要な場合も、変更する箇所も少なくできます。オーバーライドのおかげで、メソッドの変更が必要な場合に変更箇所が少なくて済みます。クラスのメンバ変数などはそのまま再利用して、変更したいメソッドだけを再定義することができます。「再利用しつつも、変えたいところは自由に変えられる」というポリモーフィズム(多様性)の思想を実現しています。スーパークラスを継承するメリットについては、こちらで詳しく解説していますのでぜひ参考にしてください。2018年10月26日オーバーロードとの違い似たような用語でオーバーロードがあります。間違われるので、簡単に説明しておきます。オーバーロードとは同じメソッド名で、引数の数や順番が違うメソッドを定義することです。今回解説しているオーバーライドは継承したサブクラスで同じメソッド名で、引数の数や順番が同じメソッドを再定義することでした。間違えないようにしましょう!オーバーライドの使い方オーバーライドの使い方をサンプルコードを使いながらみていきましょう。15この例ではClassSubクラスがClassSuperクラスを継承しています。スーパークラスであるClassSuperクラスのcalcメソッドをClassSubクラスでオーバーライドして処理を変更しています。サブクラスでcalcメソッドを再定義する前に「@Override」と記述しています。コメントアウトされていますが、これはアノテーションと呼ばれています。アノテーションでは後ほど解説します。「super」句を使うことで、サブクラスでオーバーライドしていてもスーパークラスのメソッドをそのまま使うことができます。実際にサンプルコードで確認しましょう。8この例でもClassSubクラスがClassSuperクラスを継承しています。スーパークラスであるClassSuperクラスのcalcメソッドをClassSubクラスでオーバーライドして処理を変更しています。その後に「super」句を使ってcalcメソッドを呼び出していますが、その結果はスーパークラスであるClassSuperクラスのcalcメソッドのそれと一致します。このように「super」句を使うことで、サブクラスでオーバーライドしていてもスーパークラスのメソッドをそのまま使うことができます。この例ではコンストラクタを使用して値を代入しています。スーパークラスのコンストラクタはサブクラスでも記述する必要がありますが、「super」句を使うことで簡潔に記述することができ、そのまま使うことができます。superについては、こちらで詳しく解説していますのでぜひ参考にして下さい。「スーパークラスを再利用しつつも、変えたいメソッドは自由に変えられる」ので、便利なオーバーライドですが、使用する上で守らなければならない決まり事がいくつかあります。詳しく説明していきます。戻り値の型と引数について前にも述べていますが、オーバーライドはクラス名が同じで、引数の数や順番も同じにする必要があります。メソッドの戻り値の型も同じにする必要があります。@Override(アノテーション)についてご紹介しているサンプルコードでもオーバーライドで再定義するメソッドの前に「@Override」と記述しています。コメントアウトされていますが、これをアノテーションと呼びます。アノテーションとは、オーバーライドすることを宣言するために記述します。これを記述することで、もしスーパークラスに同名のメソッドがなければコンパイラがエラーメッセージを出しますので、付けておくことをオススメします。記述しなくても問題はありません。アノテーションについては、こちらで詳しく解説していますのでぜひ参考にして下さい。2019年4月16日static修飾子についてstaticメソッドはクラス固有のメソッドであるため、オーバーライドすることはできません。staticメソッドについては、こちらで詳しく解説していますのでぜひ参考にして下さい。2019年5月28日private修飾子についてサブクラスでオーバーライドしたメソッドは、スーパークラス側のメソッドに指定されるアクセスレベルより制限の厳しいアクセスレベルを付与することができません。スーパークラス側のメソッドにprotectedで指定している場合、サブクラスではpreivateで指定することはできません。ご注意ください!アクセス修飾子のアクセスレベルについては、こちらで詳しく解説していますのでぜひ参考にして下さい。2019年4月9日abstract修飾子についてスーパークラス側のメソッドにabstract修飾子が付与されている場合は、サブクラスでは必ずオーバーライドする必要があります。オーバーライドしない場合は、そのサブクラス全体がabstractクラスになります。abstract修飾子の使い方については、こちらで詳しく解説していますのでぜひ参考にして下さい。2019年4月8日final修飾子についてスーパークラス側のメソッドにfinal修飾子が付与されている場合は、サブクラスでそのメソッドのオーバーライドはできません。final修飾子の使い方については、こちらで詳しく解説していますのでぜひ参考にして下さい。2019年10月14日throwsでの例外クラスの指定についてスーパークラス側のメソッドでthrowsを使って例外を投げる場合は、サブクラスでオーバーライドするメソッドは注意が必要です。オーバーライドするメソッドで、スーパークラス側のメソッドのthrowsで指定した例外クラス以外を指定することはできません。throwsの使い方については、こちらで詳しく解説していますのでぜひ参考にして下さい。2019年4月2日まとめここでは、オーバーライドの使い方やsuperの使い方について説明しました。継承してオーバーライドを使うことで、後々処理を変更することができるので便利です。「super」句を使うことで、変更せずにそのまま使うこともできます。使用する上での決まり事もありますので、それを守るように注意して下さい。使いこなすことができるように、この記事を何度も参考にして下さいね!TweetPocket無料でSEからWebエンジニアへ転職しませんか?侍エンジニア塾では、完全未経験の方から現在SEだけどプログラミングはやっていないという経験者まで、幅広い方々の人生を好転させるプログラミング指導を行ってきました。SEの方とお話していくなかで、システムエンジニアという職業だけどコードが書けない事務作業が多くスキルがないため将来が不安スクールに通うと完全未経験者と同じスタートになるからレベルが合わないという、すでに知識があるSEならではのお悩みがあることに気づきました。弊社では、マンツーマンでレッスンを行いますので、現在お持ちの知識レベルからカリキュラムを作成いたします。こちらの転職コースは無料で受講を始められて転職成功でそのまま卒業できるというとてもお得なコースとなっています。知識のあるSEといっても転職は年齢が若いほど受かりやすいため、まずは無料体験レッスンで今の現状や理想の働き方について一緒に考えていきましょう。熊本在住のフリープログラマ兼ライターです。C/C++/C#、Java、Python、HTML/CSS、PHPを使ってプログラミングをしています。専門は画像処理で最近は機械学習、ディープラーニングにはまっています。幅広くやってきた経験を活かしてポイントをわかりやすくお伝えしようと思います。お問合せはこちらでも受け付けています。