MENU

【Java Silver】インタフェースの作成と実装

今回も問題を解いていきましょう。

問題

次のインタフェースとクラスに関するプログラムを実行した場合の出力はどれでしょうか?正しい選択肢を選んでください。

interface SoundMaker {
                void makeSound();
            }

            class Animal implements SoundMaker {
                public void makeSound() {
                    System.out.println("Animal sound");
                }
            }

            class Cat extends Animal {
                public void makeSound() {
                    System.out.println("Meow");
                }
            }

            public class Main {
                public static void main(String[] args) {
                    SoundMaker myCat = new Cat();
                    myCat.makeSound();
                }
            }

選択肢

  • A. Animal sound
  • B. Meow
  • C. コンパイルエラー
  • D. 実行時エラー

答えと解説

回答を見る

答え

B. Meow

解説

解説のポイント:

  • インタフェースと実装クラス
  • オブジェクト型とインスタンス型の剥離

まず、インタフェースという概念について説明します。インタフェースは、クラスに「このようなメソッドを必ず実装してください」と契約を交わすためのテンプレートのようなものです。

このプログラムでは、SoundMakerというインタフェースを作成し、その中にmakeSoundというメソッドを定義しています。Animalクラスはこのインタフェースを実装しているため、必ずmakeSoundメソッドを持たないといけません。この方法により、AnimalSoundMakerインタフェースを「契約」し、その契約に基づく行動(=メソッドの実装)が保証されます。

さらに、このプログラムではCatクラスがAnimalクラスを継承し、makeSoundメソッドをオーバーライドしています。このオーバーライドが効果を発揮するのは、変数がSoundMaker型であってもオブジェクトがCat型であるためです。Polymorphism(多態性)という概念によって、実際のオブジェクト型(Cat)のメソッドが実行されます。

Javaでのポリモーフィズムの面白さは、インタフェースやスーパークラス型の変数が、実際にはサブクラス型のインスタンスを指す点にあります。これが抽象と具象の剥離を可能にし、オブジェクト指向プログラミングの強力な特性の一つとなります。このようにオーバーライドされたメソッドのみが実行されることにより、正解はB. Meowとなるのです。

つまずきポイントと発展知識

この問題でつまずくポイントとしては、インタフェースの理解が挙げられます。多くの場合、インタフェースという概念が初めて登場する際には、クラスと何が違うのか戸惑うことがあるでしょう。

また、Javaにおけるポリモーフィズムの仕組みについても、変数型とインスタンス型が異なるケースに慣れないかもしれません。このような部分はしっかりと理解しておくことで、後々登場するデザインパターンなどの高度な話題にもついていきやすくなるでしょう。

発展知識として、Javaでは多重実装が可能であるという点も理解しておくと良いでしょう。これは、1つのクラスが複数のインタフェースを実装できる性質で、異なるインタフェースの契約を一度に満たせることから、コードの再利用性と拡張性に大きく寄与します。

また、Javaの標準ライブラリにも多くのインタフェースが存在し、それを活用することでオブジェクトの使いやすさやコードの一貫性を維持することができます。

目次