【初級Java講座】オーバーライドに関する問題

プログラミング

オーバーライドに関する問題の解説記事になります。


そもそも、『オーバーライドって何?』
という方にも分かりやすいように解説していくので安心してください。

一緒に分からない問題を解決していきましょう。


この記事の内容

✔︎オーバーライドとは
✔︎オーバーライドする際のルール
✔︎オーバーライドに関する問題&解説



1.オーバーライドとは


最初に、オーバーライドとは何か簡単に説明します。

オーバーライドとは、『サブクラスで、スーパークラスのメソッドを再定義すること』です。

サブクラスがインスタンス化された時、サブクラスで再定義したメソッド(オーバーライドしたメソッド)が優先的に呼び出されます。


2.オーバーライドする際のルール


オーバーライドする際のルールは以下の3つです。

①修飾子はスーパークラスと同じorそれより公開範囲が広いもの
②戻り値はスーパークラスと同じorそのサブクラス
③メソッド名、引数リストはスーパークラスと全く同じ

このルールを元にオーバーライドしてみましょう。

オーバーライドのルールを守れているか確認します。

①修飾子はスーパークラスと同じorそれより公開範囲が広いもの
→(サブクラスの)修飾子は『デフォルト』で、スーパークラスと同じなのでOK。


②戻り値はスーパークラスと同じorそのサブクラス
→戻り値の型は『void』でスーパークラスと同じなのでOK。


③メソッド名、引数リストはスーパークラスと全く同じ
→メソッド名『method』、引数リスト『int a』でスーパークラスと同じなのでOK。

オーバーライドに関してここまで理解できたら、問題を解いていきましょう。

3.オーバーライドに関する問題

次のコードがあります。

このコードをコンパイル、実行した結果は?


一度自分で考えてみて、分からなかったら解説に進んでください。

それでは解説に進みます。

4.オーバーライドに関する問題の解答・解説

解答:7行目でコンパイルエラー


解説: SubクラスでSuperクラスのmethod()メソッドをオーバーライドしています。(7行目)
ここで、オーバーロードする際のルールを思い出してください。

①修飾子はスーパークラスと同じorそれより公開範囲が広いもの
②戻り値はスーパークラスと同じorそのサブクラス
③メソッド名、引数リストはスーパークラスと全く同じ

この3つでしたね。守れているか確認していきます。

~今回のコード~

Superクラス: public void method() { ~~ }
Subクラス: void method() { ~~ }

2つのコードを見比べると、『Subクラスのアクセス修飾子(デフォルト)が、Superクラスのアクセス修飾子(public)より公開範囲が狭い』ことが分かります。

これは、ルール①『修飾子はスーパークラスと同じorそれより公開範囲が広いもの』を守れていません。

なのでSubクラスの7行目『 void method() { ~~ }』でコンパイルエラーとなります。

%d人のブロガーが「いいね」をつけました。
タイトルとURLをコピーしました