【Java Gold SE17 対策】クラスとインターフェース完全攻略ガイド|Java Gold頻出の違いと使い分けを網羅

【図解】Java Gold SE17頻出!クラスとインターフェースの違いと使い分け。継承(is-a)と実装(can-do)、デフォルトメソッドや非公開メソッド等の最新仕様まで網羅したアイキャッチ画像。

Java Gold試験では、「クラスとインターフェース」は必ず出る基礎かつ重要分野です。
しかも単なる知識ではなく、**「どれがコンパイルエラー?」「どの実装が正しい?」**といった問題で頻出。

この記事では、試験対策として必要なポイントをわかりやすく+実践問題付きで解説します。


目次

1. クラスとインターフェースの正体

Javaにおける設計の基本ですが、Gold試験では「何ができるか」よりも「何をしたらコンパイルエラーになるか」の境界線が問われます。

  • クラス: オブジェクトの「実体」を定義する設計図。
  • インターフェース: オブジェクトの「振る舞い(約束)」を定義する仕様書。

【重要】インターフェースの隠れたルール

インターフェース内で宣言した変数は、修飾子を省略しても自動的に public static final(定数)となります。また、メソッドは基本的に public abstract です。


2. Java Goldで狙われる「4つの神器」

① defaultメソッド(Java 8〜)

インターフェースに「実装」を持たせることができます。これにより、既存のインターフェースに新しい機能を追加しても、実装クラスを壊さずに済みます。

② staticメソッド

インターフェース名で直接呼び出すメソッドです。実装クラスに継承されないという点が試験のひっかけポイントです。

③ 抽象クラス(abstract)との使い分け

「共通の内部状態(フィールド)を持ちたい」なら抽象クラス、「多重継承したい(共通の振る舞い)」ならインターフェースを選びます。

④ 多重継承と「菱形継承問題」

複数のインターフェースが同じシグネチャの default メソッドを持っている場合、実装クラスでは必ずオーバーライドして衝突を解消しなければなりません。


5. 実戦演習:Java Gold形式クイズ(全10問)

継承関係と修飾子のルールを正確に見極めましょう。

【第1問】インターフェースの実装義務

次のコードのうち、コンパイルエラーになるものはどれですか?

A. interface A { void test(); } / abstract class B implements A {}
B. interface A { void test(); } / class B implements A { public void test(){} }
C. interface A { void test(); } / class B implements A { void test(){} }
D. interface A { default void test(){} } / class B implements A {}

正解:C インターフェースのメソッドは暗黙的に public です。実装する側で public を付けないと、アクセス範囲を狭めることになり(パッケージプライベートになるため)、コンパイルエラーが発生します。

【第2問】インターフェースの変数

次のコードの説明として正しいものはどれですか?
interface A { int VAL = 10; }

A. VALprivate に変更できる
}B. VAL はインスタンス化しないと参照できない
C. VAL は暗黙的に public static final である
D. 実装クラスで VAL = 20; と書き換え可能である

正解:C インターフェースのフィールドはすべて定数です。書き換えは不可、アクセス修飾子は public 固定です。

【第3問】defaultメソッドの衝突

インターフェースAとBが共に default void hello() を持っています。class C implements A, B {} を定義した際の結果は?

A. Aの hello() が優先される
B. Bの hello() が優先される
C. クラスCで hello() をオーバーライドしないとコンパイルエラーになる
D. 実行時に例外が発生する

正解:C 重複する default メソッドを多重継承した場合、どちらを使うかクラス側で明示(オーバーライド)する必要があります。

【第4問】staticメソッドの呼び出し

interface A { static void show() { System.out.println("A"); } } があるとき、正しい呼び出し方はどれですか?

A. A.show();
B. new A(){}.show();
C. class B implements A {} を作って B.show();
D. class B implements A {} のインスタンスから b.show();

正解:A インターフェースの static メソッドは、そのインターフェース名を通じてのみ呼び出せます。実装クラスには継承されません。

【第5問】abstractクラスの継承

次のコードの結果はどうなりますか? abstract class Base { abstract void run(); } class Sub extends Base { void run() { System.out.println("Go"); } }

A. 正常にコンパイルされる
B. Subpublic を付けていないためコンパイルエラー
C. Base がコンストラクタを持てないためコンパイルエラー
D. run メソッドに @Override がないためコンパイルエラー

正解:A 抽象クラスのメソッドはデフォルトで「パッケージプライベート」にできるため、サブクラスで public を付けなくても(同じパッケージなら)コンパイルは通ります。ここがインターフェースとの大きな違いです。

【第6問】インターフェース間の継承

正しい記述はどれですか?

A. interface A implements B {}
B. interface A extends B, C {}
C. class A extends B, C {}
D. interface A extends class B {}

正解:B インターフェース同士の継承は extends を使い、かつ複数のインターフェースを同時に継承(多重継承)することが可能です。

【第7問】privateメソッド(Java 9〜)

インターフェース内で private メソッドを定義できるケースはどれですか?

A. 常にできない
B. default メソッドや他のメソッドから補助的に呼ばれる場合
C. 実装クラスでオーバーライドする場合 D. 変数の宣言時

正解:B Java 9から、インターフェース内のコード重複を避けるために private メソッド(および private static メソッド)を書けるようになりました。

【第8問】抽象クラスと具象クラス

abstract class A { abstract void play(); } を継承した class B が、さらに class C に継承されています。play() を実装しなければならないのはどこですか?

A. 必ず B で実装しなければならない
B. Babstract なら、C で実装すればよい
C. A ですでに実装されていなければならない
D. どこでも実装しなくてよい

正解:B 最初の「具象クラス(抽象クラスではない普通のクラス)」が、すべての抽象メソッドを実装する責任を持ちます。

【第9問】finalメソッドの継承

class A { final void msg() {} } を継承した class B に関する説明として正しいものは?

A. Bmsg() をオーバーライドできる
B. Bmsg() をオーバーライドしようとするとコンパイルエラーになる
C. A をインスタンス化できない
D. Bmsg() を呼び出すことができない

正解:B final メソッドは「変更不可」を意味するため、サブクラスでのオーバーライドを禁止します。

【第10問】インターフェースの修飾子

インターフェースのメソッドに付けてはいけない修飾子はどれですか?

A. default
B. static
C. final
D. private

正解:C インターフェースのメソッドは「いつか誰かが実装(またはオーバーライド)すること」を前提としているため、上書きを禁止する final を付けることはできません。


まとめ:合格へのチェックリスト

[ ] インターフェースのメソッド実装時は public 忘れに注意 [ ] default メソッドが衝突したら、実装クラスでオーバーライド [ ] static メソッドは インターフェース名.メソッド名 で呼ぶ [ ] フィールドはすべて定数(public static final) [ ] 内部リンク:ラムダ式&Stream API攻略ガイド もチェック!

理解したら、問題で確認

Java Gold SE17のコード読解問題に挑戦する

この記事で学んだ内容を、Java Gold SE17向けの問題演習アプリで復習できます。 カテゴリ別問題と60問の模擬試験を、登録不要で利用できます。

Java Gold問題を解く →
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

tibiyaのアバター tibiya ITエンジニア

文系卒エンジニア(8年目)
Java / JavaScript / C# を中心に業務システム開発を経験。
Java資格・IT就活・文系エンジニアの実体験を発信しています。

コメント

コメントする

目次