検索

キーワード


目次

Javaにおけるオーバーライドの基本|利用法と活用する利点についても紹介

  • 公開日:2022-02-28 21:22:38
  • 最終更新日:2022-09-27 15:48:13
Javaにおけるオーバーライドの基本|利用法と活用する利点についても紹介

Workteria(ワークテリア)では難易度の高いものから低いものまで、スキルや経験に合わせた案件を多数揃えています。会員登録は無料ですので、ぜひ会員登録してご希望の案件を探してみてください!

フリーランス/正社員のエンジニアとして活躍するには、ご自身のスキルや経験に合わせた仕事を選ぶことが大切です。ご希望の案件がみつからない場合はお気軽にお問い合わせください!ユーザ満足度の高いキャリアコンサルタントが在籍していますので、希望条件や悩み事などなんでもご相談ください。ご希望にピッタリの案件をご紹介させていただきます。

Javaにおけるオーバーライドとは?

パソコン

Javaにおけるオーバーライドとは、継承した親クラスの同じ名前のメソッドの内容を子クラスにて再定義する(書き換える)ことです。オーバーライドでは、メソッドの名前、引数の数、引数の型、引数の順番、戻り値の型が全て同じでなければなりません。


似たような名前の機能に「オーバーロード」がありますが、こちらは同一のクラスに、同一のメソッド名で引数の数、引数の型、引数の順番の異なるメソッドを複数定義する機能になります。


ちなみに、Javaの継承とは、親クラスのフィールドやメソッドなどのメンバを全て引き継いだ子クラスを定義することを指します。

Javaでオーバーライドが必要な条件とは

パソコンを使う人

Javaには抽象クラスと具象クラスというクラスがあります。抽象クラスとは、処理内容が確定していないクラスのことです。クラスを定義する際、修飾子として「abstract」をつけることで、抽象クラスであることを宣言します。


抽象クラスとして定義されている親クラスを継承して、サブクラスの具象クラスを定義する場合、抽象メソッドはオーバーライドを強制されます。オーバーライドが強制されるということは、オーバーライドによって具体的な処理を実装する必要があるということです。

Javaでオーバーライドができない条件とは

パソコンデータ

メソッドの定義のされ方によっては、オーバーライドができない場合があります。ここでは、Javaでオーバーライドができない条件を2つ紹介します。いずれもメソッドにつけられた修飾子がポイントとなります。そこをチェックしましょう。

「final」修飾子の場合

Javaでオーバーライドができない条件の1つ目は、オーバーライド元のメソッドに、「final」修飾子がついている場合です。


メソッドに「final」がついている場合、オーバーライド禁止を意味しています。継承先でメソッドの内容を変更させたくない場合は、修飾子に「final」をつけると良いでしょう。

「static」修飾子の場合

Javaでオーバーライドができない条件の2つ目は、「static」修飾子のついたクラスメソッドの場合です。


staticメソッドであるクラスメソッドはオーバーライドできません。オーバーライドが可能なのは、非staticメソッドであるインスタンスメソッドのみとなります。

Javaでオーバーライドする際のルール3つ

ミーティング

Javaでオーバーライドを使うためには、守らなければならないいくつかのルールがあります。ここでは、Javaでオーバーライドする際の代表的なルールを3つ簡単に紹介していきます。

1:「@override」の目印をつける

オーバーライドをするメソッドの上に「@override」を記述します。これはアノテーションと呼ばれ、このメソッドはオーバーライドしたメソッドであるという目印です。


この「@override」をつけることで、自分以外の人がソースを見た際にオーバーライドしたメソッドであることが一目でわかります。


また、このアノテーションが記述されていた場合、親クラスに同じ名前のメソッドがなければ、コンパイラがエラーメッセージを出してくれます。


このアノテーションは記述されていなくても問題ありません。しかし、上記のようなメリットがあるため、記述することをおすすめします。

2:「super」で親クラスの要素にアクセスする

子クラスの中で、親クラスのメソッドをそのまま使いたいという場合もあるのではないでしょうか。そのようなときは、「super.メソッド」と記述することで、親クラスのメソッドを呼び出して使うことができます。


メソッドだけでなく、親クラスの変数についても、「super.」をつけることで参照が可能です。親クラスでなく、子クラスのメソッドを使うことを明示的に示す場合は、「this.メソッド」といった記述をします。但し「this.」は省略可能です。

3:親クラスに子クラスのインスタンスを代入する

親クラスを継承した子クラスは、親クラスを型として変数を定義した場合、キャスト(型変換)を必要とせず、インスタンスとして代入することが可能です。これは、子クラスが親クラスのメンバを全て内包しているためです。


親クラスに子クラスのインスタンスを代入すると、オーバーライドをしている場合、実行されるメソッドは変数の型(親クラス)ではなく、インスタンスの型(子クラス)のメソッドになります。

Javaでオーバーライドする際に注意すべき点

パソコンを使う人

Javaでオーバーライドする際に注意しなければならないことがあります。ここでは「「throws」で例外クラスを指定する場合について」と「「private」修飾子の指定について」それぞれ注意する点を紹介していきます。

「throws」で例外クラスを指定する場合について

「throws」で例外クラスを指定する場合の注意点は以下の通りです。親クラスにて指定されているthrows節以外の例外を、子クラスのメソッドに指定することはできません。


但し、親クラスで指定されている例外をさらに限定するような例外は、子クラスでも指定することができます。


非チェック例外の例外クラス型(RuntimeExceptionおよびRuntimeExceptionのサブクラス)の場合は、親クラスで指定されている例外クラス型に関係なく、子クラスで指定が可能です。

「private」修飾子の指定について

「private」修飾子の指定についての注意点は以下の通りです。親クラスのメソッドに指定されているアクセス修飾子よりも厳しい制限を持つアクセス修飾子を子クラスのメソッドに指定することはできません。


具体的に説明すると、親クラスのメソッドに「protected」が指定されていた場合、子クラスのメソッドに「private」を指定することはできないということです。

Javaでオーバーライドを活用する利点

パソコンデータ

Javaでオーバーライドを活用する利点は、「再利用のしやすさ」と「保守のしやすさ」です。親クラスを継承していれば、子クラスでオーバーライドをしたとしても、親クラスのメソッドはそのまま使用できます。


そのため、子クラスで同じようなメソッドを再度作成しないで済みます。その再利用のしやすさがオーバーライドを活用する利点の1つです。


オーバーライドをしていると、親クラスや子クラスの処理を修正したいとなった場合、それぞれのクラスの必要な一部分だけを修正するだけで済みます。修正箇所が少ないというのは、保守がしやすいと言えるでしょう。

Javaにおけるオーバーライドの基本と利用法を理解しよう

ノートとペン

この記事では、Javaにおけるオーバーライドの基本と利用方法を紹介してきました。オーバーライドが利用できるようになると、利用しない場合と比較して、効率的にJavaのコーディングができるようになります。


似た機能のオーバーロードとの違いなども理解しつつ、Javaでの開発の参考にしてみてください。


【著者】

【記事監修】山崎 裕(東京ITカレッジ講師)

東京ITカレッジで講師をしています。

Java 大好き、どちらかというと Web アプリケーションよりもクライアントアプリケーションを好みます。でも、コンテナ化は好きです。

Workteria(旧 Works)ではみなさまのお役に立つ情報を発信しています。

「Workteria」「東京ITカレッジ」をご紹介いただきました!

編集した記事一覧

正社員/フリーランスの方でこのようなお悩みありませんか?

  • 自分に合う案件を定期的に紹介してもらいたい
  • 週2、リモートワークなど自由な働き方をしてみたい
  • 面倒な案件探し・契約周りは任せて仕事に集中したい

そのような方はぜひ、Workteriaサイトをご利用ください!

  • 定期的にご本人に合う高額案件を紹介

  • リモートワークなど自由な働き方ができる案件多数

  • 専属エージェントが契約や請求をトータルサポート

よく読まれている記事
【Java】JSPでタグライブラリを使う(JSTL)

【Java】JSPでタグライブラリを使う(JSTL)

こんにちは。エンジニアの新田です!ここでは、システムエンジニアとして働いている私が、システム開発手法や開発言語について紹介していこうと思います。今回は、JSPの標準タグライブラリ「JSTL」について紹介します。Javaについて勉強している方、Webアプリケーションを構築したいと思っている方の参考になれば幸いです!関連記事リンク: 【Java】JSPの基本的な構文/【Java】JSPのアクションタグ

【Java】Stringクラス文字列を操作するメソッドの使い方まとめ!実例も紹介!

【Java】Stringクラス文字列を操作するメソッドの使い方まとめ!実例も紹介!

こんにちは。新人エンジニアのサトウです。システムエンジニアとして駆け出したばかりですが、初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。プログラム初心者✅にも、プログラムに興味がある人✨も、短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!そもそもStringとは何?『 String 』... Java言語において文字列のデータ型を指します。基本デ

【Java】文字列の置き換え(String#format)!エスケープシーケンスのまとめも!!

【Java】文字列の置き換え(String#format)!エスケープシーケンスのまとめも!!

こんにちは。新人エンジニアのサトウです。システムエンジニアとして駆け出したばかりですが、初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。プログラム初心者✅にも、プログラムに興味がある人✨も、短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!Stringクラスformatメソッドの文字列整形【java.utilパッケージ】Formatterクラスfo

【Java】文字列格納後に変更可能!?StringBufferクラスとStringBuilderクラス!

【Java】文字列格納後に変更可能!?StringBufferクラスとStringBuilderクラス!

こんにちは。新人エンジニアのサトウです。システムエンジニアとして駆け出したばかりですが、初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。プログラム初心者にも✅、プログラムに興味がある人✨も、短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!文字列を扱う3つのクラス【java.langパッケージ】java.langパッケージの文字列を扱うクラスにはS

【Java】値?変数?型??しっかり解説!『データ型(プリミティブ型と参照型)』

【Java】値?変数?型??しっかり解説!『データ型(プリミティブ型と参照型)』

こんにちは。新人エンジニアのサトウです。システムエンジニアとして駆け出したばかりですが、初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。プログラム初心者✅にも、プログラムに興味がある人✨も、短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!プリミティブ型と参照型プログラム開発では型を持った変数を使ってデータのやり取りをしますが、データ型によって仕様