今からでも遅くない!クラスの継承(extends)を学ぼう!【Java】

作ったクラスをコピーして、コピーしたクラスに機能を追加したいと思ったことありませんか?

例えば、RPGでゲームを作る時に「人間」クラスを作り、「剣士」「魔法使い」「アーチャー」と個別でキャラクターの機能を追加したい場合どうすればよいでしょうか?

クラスの継承という機能を使うことでこれらを実現することができます。

継承は継承元となるクラスのメンバ変数やメンバメソッドをあらためて記述する必要がなく使うことができて便利です。

この記事では、クラスの継承について

・クラスの継承とは
・基底クラスを継承するメリットとは

という基本的な内容から、

・インターフェースの実装とクラスの継承の違い
・メソッドをオーバーライドするメリットとは
・継承したクラスでのコンストラクタの扱い方

など具体的な使い方についても解説していきます。

今回はクラスの継承について、使い方をわかりやすく解説します!

クラスの継承とは

あるオブジェクトの属性(メンバ変数)やその属性を使った処理(メンバメソッド)で共通するメンバ(メンバ変数とメンバメソッド)を集めたクラスがあるとします。

このクラスに対して、共通するメンバはそのまま使用しつつも新たな属性や処理(メンバ)を加えることをクラスの継承といいます。

共通するメンバを集めた継承元のクラスのことを「基底クラス」、「スーパークラス」、「親クラス」などと呼びます。

また基底クラスを継承したクラスのことを「派生クラス」、「サブクラス」、「子クラス」などと呼びます。

派生クラスでは、基底クラスの処理を変えたい場合にその処理のメソッド名や引数を変えることなく、別の処理を記述することもできます。

これをメソッドのオーバーライドと呼びます。

基底クラスをextendsで継承するメリットとは

基底クラスを継承する方法について説明します。

継承を使うには「extends」句を用います。

派生クラスのクラス名の後ろに「extends」句を記述しその後に基底クラス名を記述します。

派生クラスは下記のような記述になります。

ちなみに基底クラスの記述方法は通常のクラスの記述方法と変わりません。

また、派生クラスでは基底クラスのメンバ変数やメンバメソッドをそのまま使うことができます。

あらためて派生クラス内で使いたいメンバ変数やメンバメソッドを記述する必要はありません

それではサンプルコードで使い方をみていきましょう。

実行結果:

このサンプルコードでは、基底クラスであるClassSuperクラス内にint型のi1変数、i2変数とcalc1メソッドがあります。

これを派生クラスであるClassSubクラスで継承しています。

派生クラスであるClassSubクラスにはint型のi1変数、i2変数とcalc1メソッドの記述はありませんが、基底クラスであるClassSuperクラスのcalc1メソッドを呼び出し、int型のi1変数、i2変数への値の代入と計算結果の表示が実行されています。

変数名が同じ場合には、変数名に「this.」句をつけて引数で代入される変数名と区別します。

継承することで、派生クラスであらためて基底クラスのメンバを記述することなく、基底クラスと同じ処理を実行することができています。

このように、派生クラスでは基底クラスのメンバ変数とメソッドを再定義する必要なく使用することができます。

インターフェースの実装とクラスの継承の違い(implements)

クラスに似た機能として、インターフェースというものがあります。

インターフェースは抽象クラスのように継承して使いますが、インターフェースの場合は「継承」ではなく、「実装」と呼びます。

クラスでは複数のクラスを継承する多重継承はできませんが、インターフェースは多重継承のように複数のインターフェースを実装をすることができます。

インターフェースについてはこちらの記事で詳しく解説しているので、ぜひ確認してください。

【Java入門】interface(インタフェース)の使い方総まとめ
更新日 : 2019年4月26日

メソッドをオーバーライドするメリットとは

メソッドのオーバーライドとは、派生クラスで基底クラスの処理をメソッド名や引数を変えることなく、別の処理に書き換えることです。

書き換えた後に「super」句を用いて、書き換える前の処理内容を実行することも可能です。

詳しくは別の記事で解説していますので、下記のリンク先を参照してくださいね!

【Java入門】オーバーライド(Override)の使い方
更新日 : 2019年6月7日

継承したクラスでのコンストラクタの扱い方

継承したクラスでは基底クラスのコンストラクタを記述する必要があります。

とはいっても、派生クラスでも同じ内容を記述する必要はありません

super」句を使って手短に記述することができます。

詳しくは別の記事で解説していますので、下記のリンク先を参照してくださいね!

【Java入門】継承とコンストラクタの呼び出し(super/this)
更新日 : 2018年11月20日

クラスについてもっと詳しく知りたい方へ

クラスのさまざまな使い方については、以下の記事にまとめていますので、ぜひ参考にしてくださいね!

【Java入門】クラスの使い方総まとめ
更新日 : 2019年7月24日

まとめ

ここでは、基底クラスを継承するメリットやメソッドをオーバーライドするメリット、継承したクラスでのコンストラクタの扱い方について説明しました。

クラスの継承を使うことで、派生クラスでは基底クラスのメンバ変数やメンバメソッドをあらためて記述する必要がなくなります

そうすることで、コードも読みやすくなり後々の修正やメンテナンスがしやすくなり便利です。

この便利な仕組みを使いこなすことができるように、この記事を何度も参考にして下さいね!

LINEで送る
Pocket

最短でエンジニアを目指すなら侍エンジニア塾

cta_under_bnr

侍エンジニア塾は業界で初めてマンツーマンレッスンを始めたプログラミングスクールです。これまでの指導実績は16,000名を超え、未経験から数多くのエンジニアを輩出しています。

あなたの目的に合わせてカリキュラムを作成し、現役エンジニア講師が専属であなたの学習をサポートするため効率よく学習を進めることができますよ。

無理な勧誘などは一切ありません。まずは無料体験レッスンを受講ください。

無料体験レッスンの詳細はこちら

書いた人

長野 透

長野 透

熊本在住のフリープログラマ兼ライターです。C/C++/C#、Java、Python、HTML/CSS、PHPを使ってプログラミングをしています。専門は画像処理で最近は機械学習、ディープラーニングにはまっています。幅広くやってきた経験を活かしてポイントをわかりやすくお伝えしようと思います。
お問合せはこちらでも受け付けています。
[email protected]

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説