インタフェースという言葉を聞いたことはありますか?
「言葉は知っているけどどういった機能かわからない」
「参考書で勉強したけどいまいち理解できなかった」
このような方に向けて、今回はJavaのインタフェースについて初心者の方でもわかるように解説していきます。
インタフェースとは?
まずインタフェースですが、これは型だけを最初に記載しておくためのものです。
もう少し分かりやすく説明しますと、インタフェースは後から作成するクラスのために予め使用するメソッドを記載しておく設計図のようなものです。
インタフェースは定数と抽象メソッドのみ記載が可能です。
抽象メソッドとは具体的な実態を持たない簡易的なメソッドの事です。
詳しくはまた別の記事で解説します。
インタフェースに記載する抽象メソッドにはいくつかの制約があります。
1つ目は抽象メソッドの修飾子はpublicでないとダメというものです。
そのため何も修飾子を記載しなくても自動でpublicとなります。
2つ目はインスタンス化することができないというものです。
インスタンス化についてわからないという方は下記記事で解説していますので、一度読んでみてください。
【Java】インスタンスとは何なのか? | エンジニアKISARAGIの備忘録 (kisaragi-it.com)
ではどのように使用するかというとインタフェースを実装したクラスをインスタンス化するというのが標準的な使用方法です。
そしてインタフェースに記載可能な定数はstaticなものでないといけません。
これはインスタンス化しなくても使用可能なようにするためです。
とは言え明示的に記載する必要があるかというとそんなことはなく自動的にインタフェースに記載するフィールドはpublic static finalなものとなります。
なので通常のクラスに記載するように「型 定数名」と記載するだけで定数を作成することが可能です。
インタフェースの使用方法
では具体的なインタフェースの記載方法を解説していきます。
クラスの実装方法
【インタフェース】
public interface Book {
void buy();
void sell();
}
インタフェースは上記のように記載します。
そしてこれだけでは使用することができないので下記のようにクラスで実装します。
【実装クラス】
public class Novel implements Book{
public void buy() {
System.out.print("小説を購入しました");
}
public void sell() {
System.out.print("小説を売りました");
}
}
先ほど作成したインタフェースを実装するにはimplementsというキーワードを使用します。
また実装する際に記載するメソッドはpublicにしておく必要があります。
これはインタフェースがpublicであった為、それよりも可視性を下げることができないためです。
現実的なもので例えるとインタフェースでは双眼鏡を使用して景色を見ていいよと言っていたのに、クラスになった途端目視で景色を確認するようにと言われたので怒られたといった感じです。
インタフェースの継承
クラスの継承があったようにインタフェースを継承することも可能です。
その方法は下記のようにクラスの継承と同様でextendsというキーワードを記載するだけです。
public interface Ebook extends Book{
void ebook_buy();
}
因みにクラスでは多重継承が禁止されていましたが、インタフェースの多重実現は可能となっています。
やり方としては下記のようにコンマ区切りで記載するだけです。
public class a implements b,c{}
インタフェース実装の注意点
インタフェースを実装する際に注意していただきたい事が、インタフェースで記載した抽象メソッドを必ず実装する必要があるというものです。
記載しないとコンパイルエラーとなりますので注意が必要です。
public interface Book {
void buy();
void sell();
}
public interface Ebook extends Book{
void ebook_buy();
}
先ほど記載した上記EbookはBookを継承しているため、実装する際は下記のように両インタフェースで定義したメソッドを実装する必要がありますので、その点も覚えておきましょう。
public class BusinessBooks implements Ebook{
public void ebook_buy() {
System.out.println("ビジネス書を電子書籍版で購入する");
}
public void buy() {
System.out.println("ビジネス書を紙の書籍で購入する");
}
public void sell() {
System.out.println("ビジネス書を紙の書籍で販売する");
}
}
defaultメソッドとは?
先ほど実装したクラスではインタフェースで定義した抽象メソッドをすべて記載する必要があると話しましたが、defaultメソッドを使用することでその必要がなくなります。
public interface Book {
void buy();
void sell();
}
public interface Ebook extends Book{
default void ebook_buy() {
System.out.println("電子書籍版で本を購入する");
}
}
public class BusinessBooks implements Ebook{
public void buy() {
System.out.println("ビジネス書を紙の書籍で購入する");
}
public void sell() {
System.out.println("ビジネス書を紙の書籍で販売する");
}
}
上記のようにEbookのebook_buyメソッドの先頭にdefaultと記載し実装内容を記載することでBusinessBooksではebook_buyというメソッドを記載していないことが分かるかと思います。
記載方法は見ていただければわかるかと思いますが、通常のクラスに記載するメソッドとそこまで変わりません。
defaultメソッドをインタフェースに記載することでいちいち実装したクラスすべてで抽象メソッドの実装をする必要がないというメリットがあります。
まとめ
当記事ではJavaのインタフェースについて解説してきました。
- インタフェースとは?
- インタフェースの使用方法
初めて勉強する場合インタフェースというのは少しイメージしずらいものがあると思います。
なので実際にコードに記載して何度も動かしてみることで段々と慣れてきますので、あきらめず挑戦していってください。
以上で今回の解説は終了となります。
コメント