【Java入門】interfaceとimplementsの使い方を基礎の基礎から解説!

Javaでオブジェクト指向を勉強を初めた初心者にとって、

interfaceって何?
implementsって何のためにあるの?

と疑問に思ってしまう方も多いのではないでしょうか?

でも、使い方がわかると後々で柔軟に対応がとれるようになるので、けっこう便利なんです。

そこで、この記事では

  • 【基礎】interfaceの使い方
  • 【発展】interfaceとdefaultの使い方
  • 【発展interfaceとstaticの使い方
  • 【発展】interfaceとabstract(抽象クラス)との違い

などの基礎から応用的な内容についても解説していきます。

今回はinterfaceimplementsについて、使い方をわかりやすく解説します!

interfaceの使い方

interfaceでは、定数とメソッド名のみ定義できます。

定義する変数は「public static final」が付いているものとみなされ、定数として扱われます。

また、実装したクラスではメソッドの実装が必須となります。

interfaceの宣言と実装について

インターフェースの宣言は下記のように記述します。

インターフェースの宣言例:

インターフェースを実装する場合には「implements」句を使用し下記のように記述します。

インターフェースの実装例:

メソッドを実装する方法

それではサンプルコードでメソッドを実装する方法についてみていきましょう。

実行結果:

このサンプルコードでは、まずCalc1インターフェースを宣言しています。

文字列型とint型の定数を定義し、3種類のメソッドの型だけを宣言しています。これをAddクラスで実装しています。

Addクラス内ではCalc1インターフェースで宣言したメソッドの処理内容を記述しています。

実行(Main)クラスではAddクラスをインスタンス化し、Addクラスで記述したメソッドの処理が実行されています。

処理内容を変える方法

それでは次に、処理を変える必要が出てきた場合をみていきましょう。

これまでは足し算の処理でしたが、掛け算に変えてみます。

サンプルコードをみていきましょう。

実行結果:

このサンプルコードでは、計算処理内容の変更のためにMultiplyクラスを追加し、Mainクラスの記述の一部を変更しています。このようにクラスの追加と実行処理の記述の一部を変更することで処理内容を変更することができます。

ここで、注意があります。

足し算から掛け算に変更したので、表示する文字列を”掛け算をします”に変更しました。

その際に

と記述したくなりますが、これは出来ません。

Calc1インターフェースで

と定義していても、「public static final」が付いているものとみなされ、定数として扱われるからです。

注意しましょう!

この例では、AddクラスとMainクラスの記述されている場所が近いので、このような書き方をすると確かに”なぜ?”となるかもしれません。

しかし、例えばCalc1インターフェースとAddクラスがMainクラスとは別のファイルに記述されている場合はどうでしょうか?処理を変更したい場合は、Addクラスを見つけ出して書き直す必要がありますよね。

でもinterfaceを使えば、MultiplyクラスのようにMainクラスと同じファイル内に処理の変更を記述することができます。

探して書き換える手間が省けるのがメリットなのです。

処理が複雑になり記述量が多くなると、多数のファイルに分けて記述するという機会が増えます。

そんな場合はinterfaceでメソッドの型だけ宣言しておいて処理は別で記述する方が、後々の変更などが予想される場合には便利になってくるのです。

interfaceとdefaultの使い方

interfaceのメソッドに「default」句を使うと、処理内容を実装したメソッドを定義することができます。

詳しい解説についてはこちらを参照してくださいね。

【Java入門】interfaceとdefaultの使い方
更新日 : 2018年10月26日

interfaceとstaticメソッドの使い方

interfaceで定義する変数は「public static final」が付いているものとみなされ、定数として扱われるとお伝えしました。

それではinterfaceで定義するメソッドに「static」をつけるとどうなるのでしょうか?

メソッドに「static」句をつけると、インスタンスを生成せずにそのメソッドを使用することができます。

サンプルコードで確認していきましょう。

実行結果:

このサンプルコードでは、まずCalc1インターフェースを宣言しています。

文字列型とint型の定数を定義し、3種類のメソッド全てに「static」句を付け、さらに処理内容を定義しています。

実行(Main)クラスではインスタンスを生成せずに、Calc1インターフェースで記述したメソッドを呼び出し実行しています。

interfaceとabstract(抽象クラス)との違い

インターフェースの特徴は多重継承できることです。

多重継承とは1つのクラスが複数の親クラスを持つことを言います。多重継承をすることにより、1つのクラスは2つのクラスの性質を同時に受け継ぐ事になります。

同じように抽象クラスを使っても、別でメソッドの処理内容を決めることができます。

しかし、抽象クラスでは多重継承をすることができません。クラスは多重継承することができず、したがってクラスである抽象クラスも多重継承ができないのです。

それに対して、インターフェースはクラスではなく、多重継承が可能なのがインターフェースと抽象クラスの大きな違いになります。

インターフェースを使った多重継承の例をサンプルコードでみてみましょう。

実行結果:

このサンプルコードでは、AddインターフェースとMultiplyインターフェースを宣言しています。

AddインターフェースとMultiplyインターフェースの両方を実装するCalcクラスを定義しています。AddインターフェースとMultiplyインターフェースで、int型定数のA、Bとメソッドのmethodは同じ名称ですが、問題ありません。

ただしこの場合、int型定数のAおよびBを引数とすると、AddインターフェースとMultiplyインターフェースのどちらの定数を指定しているかあいまいなため、どちらか明示する必要があります。

ここではAddインターフェースのAおよびBを指定しています。

実行(Main)クラスではCalcクラスをインスタンス化し、それぞれのメソッドの処理を実行しています。

また、abstract(抽象クラス)の詳しい使い方についてはこちらを参考にしてくださいね!

【納得Java】抽象クラス(abstract)を使うメリット
更新日 : 2019年4月8日

interface(インタフェース)の使い方総まとめ

interface(インタフェース)のいろいろな使い方を次の記事にまとめているので、ぜひ確認してください!

【Java入門】interface(インタフェース)の使い方総まとめ
更新日 : 2019年4月26日

まとめ

ここでは、interfaceについて説明してきましたがいかがだったでしょうか?

処理の内容を決めずに型だけ宣言して別で処理を決めるメリットや、複数のインターフェースのメソッドを1つのクラスにまとめることができるメリットを感じて頂けましたでしょうか?

“処理を書くのがプログラム”という思いがあるので慣れが必要かもしれませんが、そんな場合はこの記事を何度も参考にして下さいね!

LINEで送る
Pocket

最短でエンジニアを目指すなら侍エンジニア塾

cta_under_bnr

侍エンジニア塾は業界で初めてマンツーマンレッスンを始めたプログラミングスクールです。これまでの指導実績は16,000名を超え、未経験から数多くのエンジニアを輩出しています。

あなたの目的に合わせてカリキュラムを作成し、現役エンジニア講師が専属であなたの学習をサポートするため効率よく学習を進めることができますよ。

無理な勧誘などは一切ありません。まずは無料体験レッスンを受講ください。

無料体験レッスンの詳細はこちら

書いた人

長野 透

長野 透

熊本在住のフリープログラマ兼ライターです。C/C++/C#、Java、Python、HTML/CSS、PHPを使ってプログラミングをしています。専門は画像処理で最近は機械学習、ディープラーニングにはまっています。幅広くやってきた経験を活かしてポイントをわかりやすくお伝えしようと思います。
お問合せはこちらでも受け付けています。
[email protected]

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説