【Java入門】interface(インターフェース)の使い方

【Java入門】interface(インターフェース)の使い方
長野 透
書いた人 長野 透

こんにちは!フリーランスの長野です。

オブジェクト指向を勉強したての頃

「何のためにあるの?」

と思ってしまう概念の一つが、interfaceではないでしょうか?

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

この記事では、interfaceについて

・interfaceとは
・interfaceの使い方

という基本的な内容から、

・interfaceとdefaultの使い方
・interfaceとstaticの使い方
・interfaceとabstract(抽象クラス)との違い

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

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

interfaceとは

interfaceとは、一言でいうと

処理内容を具体的に書かず、メソッドの型だけを宣言

例えばこんな記述です。

interfaceの記述例(メソッドの型のみ宣言):

プログラムを学んいると

「処理内容を書く」

ことを当たり前のようにやってきています。

だから、処理内容を書かないなんて

「どうして?」

と思っちゃいますよね。

でも、具体的に書かないメリットがあるんです。

それは、実際に処理を実行する直前に処理内容を決められるんです。

ということは、処理を後で変えることもできるんです。

後になって、処理を変えたい場合はありませんか?

そんな時に該当する場所をわざわざ探しに行って変える必要がないんです。

これってとても便利ですよね。

では、実際の使い方についてサンプルコードで解説していきます!

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」句を使うと、処理内容を実装したメソッドを定義することができます。

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

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(抽象クラス)の詳しい使い方についてはこちらを参考にしてくださいね!

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

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

まとめ

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

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

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

Javaカリキュラム無料公開中!
この記事はJava入門完全攻略ガイド【基礎学習/アプリ開発/仕事獲得】の一部になります。このカリキュラムは、プログラミング入門者が、基礎学習からアプリ開発、さらには仕事獲得まで体系的に学べる内容となっています。

Java学習に必要な情報を一つにまとめていますので効率よくJavaを学ぶことが出来ます。この機会に是非活用していただければと思います。


33歳、未経験だった僕がフリーエンジニアになれた理由
現在フリーでWEBエンジニアをやられている濱口直行さん。33歳で、プログラミングを学び始め、約半年という短い期間で独立までされた学習ログを余すことなくインタビューさせていただきました。

プログラミングを学習中の方はもちろん、独立をお考えの方まで幅広く活用できる記事になっています。この機会に是非活用していただければと思います。


最短でJavaを習得したい方へ

もし、あなたが、

「難しすぎて学習が全然進まない」
「学習量が膨大でゴールが見えない」
「エラーを解決するのに何日もかかってしまう」

など、プログラミング学習やキャリアに関してお困りであれば、まずは『無料体験レッスン』にお申し込み下さい。

あなたにとって、最適の解決策をご提案させていただきます。

詳しくは下の画像から詳しいサービス内容をご確認ください。

cta_bannar-java1

学習者インタビュー

32歳ベンチャー企業元役員が起業してプログラミングを学んだ話
ヨガスタジオのマネージャーだった私が3ヶ月でWeb制作をマスターするためにした”たった1つ”のこと
Uターン女子がRubyを学んで理想のライフスタイルを手に入れた話
ダメ営業マンがわずか3ヶ月でエンジニアデビューできた理由

プログラミング学習者必見

専属講師に質問し放題、レッスンし放題、最短1ヶ月でフリーランスエンジニア
プログラミング学習カリキュラム無料公開中
Ruby学習カリキュラム無料公開中
 1記事最大11,000円!テックライター募集


LINEで送る
Pocket

この記事が気に入ったら
いいね!をしてフォローしよう

最新情報をお届けします

書いた人

長野 透

長野 透

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