Java Silverの学習を進めていくと、必ずぶつかる大きな壁があります。それが「継承」「インターフェース」「ポリモーフィズム」というオブジェクト指向の重要概念です。
漢字やカタカナが並んでいて難しそうに感じますが、実はプログラミングの世界を「より便利に、より効率的に」するための単なるルールに過ぎません。
この記事では、完全未経験の方でも腹落ちするように、図解を交えながら(※ここに作成したアイキャッチや図解を挿入)Java Silver試験で問われるポイントに絞って解説します。
1. 継承(Inheritance)とは? 〜既存の設計図を使い回す〜
継承とは、「すでにあるクラス(設計図)の機能を引き継いで、新しいクラスを作ること」です。
ゼロからすべてのコードを書くのは大変なので、「共通する部分は親からもらい、違う部分だけ子で新しく書こう」という効率化の仕組みです。
- 親クラス(スーパークラス): 元となる基本のクラス
- 子クラス(サブクラス): 親を引き継いで、新しく作るクラス
記述方法とルール
Javaでは、継承を行う際に extends(拡張する)というキーワードを使います。
Java
// 親クラス
class Animal {
void eat() {
System.out.println("ご飯を食べます");
}
}
// 子クラス(Animalクラスを継承)
class Dog extends Animal {
void bark() {
System.out.println("ワンと鳴きます");
}
}
この場合、Dogクラスは自分でeat()メソッドを書いていなくても、Animalクラスを継承しているためeat()を使うことができます。
👑 Java Bronzeの頻出ポイント
- 単一継承の原則: Javaでは、親クラスは1つしか選べません(
class Dog extends Animal, Petのような複数の継承はコンパイルエラーになります)。 - メソッドのオーバーライド: 親クラスが持っているメソッドを、子クラスで「上書き」して中身を変更することができます。
2. インターフェース(Interface)とは? 〜絶対に守るべきルールブック〜
継承が「機能の引き継ぎ」だとすれば、インターフェースは「この機能(メソッド)を必ず実装しなさい、というルールの強制」です。
例えば、「スマートフォン」というインターフェースがあった場合、「電話をかける」「インターネットを見る」という機能は絶対に必要ですよね。iPhoneでもAndroidでも、中身の仕組み(処理)は違いますが、この「ルール」は共通して守っています。
記述方法とルール
インターフェースをクラスに適用(実装)するには implements というキーワードを使います。
Java
// インターフェース(ルールの定義)
interface Smartphone {
void call(); // 処理の中身は書かない!
}
// インターフェースを実装するクラス
class iPhone implements Smartphone {
// ルールに従って、必ずメソッドの中身を書く必要がある
public void call() {
System.out.println("FaceTimeオーディオで電話します");
}
}
👑 Java Silverの頻出ポイント
- 多重実装が可能: 継承(extends)は1つだけでしたが、インターフェース(implements)は複数同時に実装することができます(例:
class iPhone implements Smartphone, Camera)。 - 抽象メソッド: インターフェースに定義されるメソッドは、基本的に「名前と戻り値」だけで、具体的な処理(
{ }の中身)を持ちません。これを抽象メソッドと呼びます。
3. ポリモーフィズム(多態性)とは? 〜柔軟な箱と中身の関係〜
言葉が一番難しそうに見えますが、Java Silverで最もよく出題され、かつスコアの差がつく最重要項目です。
ポリモーフィズムとは、「同じ指示を出しても、中身(オブジェクト)によって違う動きをする」という性質のことです。これを理解するには、「変数(箱)」と「インスタンス(中身)」を分けて考えるのがコツです。
箱(型)と中身(インスタンス)は違っていい
通常、クラスからインスタンスを作るときは左右同じ名前を書きます。
Java
Dog myDog = new Dog(); // 箱も中身もDog
しかし、ポリモーフィズムを使うと、「親クラスの箱(型)」に「子クラスの中身(インスタンス)」を入れることができます。
Java
Animal myAnimal = new Dog(); // 箱はAnimal、中身はDog
なぜこんなことをするのでしょうか?それは、「どんな動物(DogでもCatでも)が来ても、まとめてAnimalとして扱えるようにするため」です。
👑 Java Silverの頻出ポイント:ここが試験に出る!
以下のコードを見たとき、どこでエラーが起きるか(またはどう動くか)を判定する問題が頻出します。
Java
Animal a = new Dog();
a.eat(); // ① 実行できる?
a.bark(); // ② 実行できる?
- ①
a.eat();→ 実行できる!呼び出せるメソッドは「箱(左側の型)」で決まります。箱はAnimalなので、Animalクラスにあるeat()は呼べます。もしDogクラスでeat()をオーバーライド(上書き)していれば、Dog側の処理が実行されます。 - ②
a.bark();→ コンパイルエラー!箱(型)はあくまでAnimalです。Animalクラスの設計図にはbark()(吠える)という機能は書かれていないため、いくら中身がDogであっても呼び出すことはできません。
【鉄則】「呼べるか・呼べないか」は左側(型)を見る。「どう動くか」は右側(中身)を見る。
まとめ:Java Silver合格へ向けて
これら3つの概念は繋がっています。
| 概念 | キーワード | 役割 | Bronze試験でのポイント |
| 継承 | extends | 共通部分の使い回し | 親は1つだけ(単一継承)。コンストラクタの動きに注意。 |
| インターフェース | implements | ルールの統一・強制 | 複数実装できる。中身のないメソッドを定義する。 |
| ポリモーフィズム | 親型 変数 = new 子() | 柔軟な処理の実現 | 「型(左)」で呼べるか決まり、「中身(右)」で動きが決まる。 |
最初は「なんのためにこんな面倒なルールがあるの?」と思うかもしれません。しかし、Java Bronzeの問題集(黒本や紫本)で実際のコードの動きを追っていくと、「なるほど、こうすれば後からコードを修正するのが楽になるのか!」と点と点が繋がる瞬間が必ず来ます。
まずはこの基本ルールを暗記し、問題集の解説と照らし合わせながら学習を進めていきましょう!


コメント