MENU

【Java Silver 試験】メソッドのオーバーライドと制御構造の理解

Javaの基本的な動作を理解するために、以下の問題に取り組んでみましょう。

問題

次のプログラムを実行した場合の出力はどれでしょうか?正しい選択肢を選んでください。

class Printer {
                void printMessage() {
                    System.out.println("Default Message");
                }
            }
            
            class CustomPrinter extends Printer {
                @Override
                void printMessage() {
                    if (true) {
                        System.out.println("Custom Message");
                    } else {
                        super.printMessage();
                    }
                }
            }
            
            public class Main {
                public static void main(String[] args) {
                    Printer printer = new CustomPrinter();
                    printer.printMessage();
                }
            }

選択肢

  • A. Default Message
  • B. Custom Message
  • C. コンパイルエラー
  • D. 実行時エラー

答えと解説

回答を見る

答え

B. Custom Message

解説

基本説明:

このプログラムでは、Printerクラスを拡張するCustomPrinterクラスが定義されています。メソッドprintMessageがサブクラスCustomPrinterでオーバーライドされています。

if文の中でtrue条件が常に評価されているため、CustomPrinterのメッセージ「Custom Message」が出力されます。elseブロックには到達しないため、superを用いた親クラスのメソッドは呼び出されません。

誤答理由:

A. Default Messageが誤りである理由は、必ずtrueとなる条件が存在し、elseのブロックには流れないためです。また、 CDはJava言語仕様からこのコードが正常にコンパイル、実行可能であるため誤った回答です。

つまずきポイント:

初心者が引っかかりやすい点として、trueの意味と使い方が挙げられます。if文の条件が常にtrueであるとき、elseブロックは一切実行されないことを理解しておく必要があります。

発展知識:

オーバーライドの知識は多態性の根幹をなすものです。クラスが同じメソッド名を持っている際の振る舞いを理解すると、より強力なオブジェクト指向プログラミングができるようになります。また、superを用いることによって親クラスの実装を引き継ぐことができ、子クラスで新たな機能を付加できます。

目次