Javaのインタフェースの契約とは?新人エンジニア向けにやさしく解説!
こんにちは。ゆうせいです。
今回は、Javaのインタフェース(interface)における「契約」の考え方について、これからプログラミングを本格的に学んでいく新人エンジニアの方向けに、丁寧に解説していきます。
「契約」という言葉、プログラミングでは少し耳慣れないかもしれませんね。でも安心してください。たとえばアルバイトの契約書を思い浮かべてみましょう。「○○の仕事をします」「△△の時間に来ます」といったルールが決められているはずです。Javaのインタフェースも、そういった「約束ごと」を決める仕組みなんです。
インタフェースとは何か?
クラスとの違い
まず前提として、Javaには「クラス(class)」と「インタフェース(interface)」があります。
- クラス:具体的な処理や状態(変数)を持った設計図
- インタフェース:実装はせず、「何をすべきか」だけを定義する設計図
具体例で考えよう
たとえば、家電製品の「リモコン」を考えてみてください。
- リモコンは「電源を入れる」「チャンネルを変える」といったボタン(機能)がある
- でも、テレビ用かエアコン用かで中の処理(実装)は違う
この「ボタンの配置」だけを決めた設計図が、Javaのインタフェースにあたります。
「契約」とはどういう意味?
インタフェースは約束ごと
インタフェースでは、メソッド(処理の名前)だけを定義します。
public interface RemoteControl {
void turnOn();
void turnOff();
}
これは、「turnOn() メソッドと turnOff() メソッドを必ず実装してください」という契約です。
実装クラスが契約を守る
public class TV implements RemoteControl {
public void turnOn() {
System.out.println("テレビをつけました");
}
public void turnOff() {
System.out.println("テレビを消しました");
}
}
このように、TVクラスはRemoteControlの契約を守っている、つまりすべてのメソッドを実装しているということです。
契約を守らないとどうなる?
コンパイルエラーになります!
契約されたメソッドを実装しないと、Javaのコンパイラはエラーを出します。
public class IncompleteTV implements RemoteControl {
public void turnOn() {
System.out.println("ON");
}
// turnOff() が未実装 → エラー!
}
つまり、インタフェースは「絶対に守らないといけない契約」なのです。
メリットとデメリットは?
メリット | デメリット |
---|---|
実装を意識せず、共通の使い方ができる | 複数のメソッドを強制される場合がある |
多態性(ポリモーフィズム)に役立つ | 実装が煩雑になる可能性がある |
開発チーム間のルールを明確にできる | 学習初期はやや理解しづらい |
よくある質問
「抽象クラス」との違いは?
抽象クラス(abstract class)は、状態(変数)や一部実装を持つことができます。一方でインタフェースはすべて未実装。ただし、Java8以降はインタフェースにもdefaultメソッド(実装付き)が使えるようになっています。
インタフェースは複数実装できる?
はい!Javaでは、複数のインタフェースを実装できます。これは、多重継承のように使える大きな利点です。
最後に:インタフェースと契約の学び方
インタフェースの考え方に慣れるには、「共通の使い方を定義するもの」として、実際にいろんな使い方を試してみるのが一番です。
今後は以下のステップを踏んでみてください。
- インタフェースを定義してみる(メソッド名だけ!)
- 複数のクラスでそのインタフェースを実装してみる
RemoteControl rc = new TV();
のようにインタフェース型で操作するコードを書いてみる
オブジェクト指向の考え方が深まって、コードの再利用や設計がどんどん上手になりますよ!
セイ・コンサルティング・グループの新人エンジニア研修のメニューへのリンク
投稿者プロフィール

- 代表取締役
-
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。