プログラミング

【Java初心者必見】インターフェースとは?抽象クラスとの違いを抑えよう。

プログラミング
この記事は約3分で読めます。
Sponsored Links

インタフェースとは

ブック, ドア, 入り口, 文化, 図書館, 知識, 知恵, 棚, 学校, 大学, 賢いです, 背景

インターフェースとは英語で「境界面」を示します。DBアクセスなど外部処理内容と内部実装を結びつけるなどといった場面で使用します。変数とメソッドの型のみを定義しており、メソッドの具体的な処理内容などは記述しません。インターフェースでメソッドなどを定義し、実装クラスに実装内容を定義することで「カプセル化」を実現しています。インターフェースを利用することでメソッドの具体的な中身を理解しなくてもメソッドを利用することができるというメリットがあります。

インターフェースの定義方法

//インターフェース定義
interface Score{

 //フィールド定義
 int data = 10;

 //メソッド定義
 void printScore();
 //defaultメソッド
 default void printData(){
 System.out.println(data);
 }
}

インターフェースに定義できるフィールドは「public static final」なものであり、記載しなかった場合は自動的に追加されます。通常はメソッド内の処理を記述することはできないのですが、「default」を記載することでデフォルトの処理を記載することもできます。また、メソッドのアクセス修飾子は自動的に「public abstract」になり、インターフェースないにコンストラクタを定義することはできません。クラス名はには自動的に「abstract」が追加され、「abstract interface クラス名」となります。インターフェースは中身が不完全なものであることからインスタンス化することはできません。また、クラスはObjectクラスをデフォルトで継承しますが、インターフェースはクラスではないのでObjectクラスを継承していないという特徴があります。

インターフェースの利用

public class Person_1 implements Score {
    @Override
    public void printScore() {
        System.out.println("1人目の点数を出力します。");
    }
}

インターフェースは定義内容を実行クラスでオーバーライドすることで利用します。また、インターフェースがインターフェースを引き継ぐ際はextendsを利用します。

インターフェースと抽象クラスの違い

ドア, 選択肢, 選択, 意思決定, 機会, 入り口, オプション, ソリューション, 選ぶ, 戸口, 方法

最後にインターフェースと抽象クラスの違いをおさらいしていこうと思います。一見似ているように見える両者も明確な違いがあります。しっかり押さえておくようにしましょう。簡単に説明すると、abstractクラスは「階層関係にあるクラスの機能を抽象化したもの」、インターフェースは「外部から実装を付け足すもの」です。よって、abstractクラスにはdogクラスやcatクラスで使用するメソッドなどを定義しています。一方、interfaceは外部から実装を付け足すものです。Birdクラスの中身を見て定義されたものではないので、Birdクラスでは明らかに不必要なものも含まれています。

abstractとinterfaceでは作成の背景が違うのでしっかり抑えるようにしましょう。定義面での違いは下記のようになります。

インターフェース抽象クラス
クラスの修飾子publicのみpublicやprotected
フィールドpublic static finalのみなんでも可
メソッド抽象メソッドのみ定義1つ以上抽象メソッドがあれば可
継承複数継承可1つのクラスに対して1つ

最後に

インターフェースは、一見すると抽象クラスとの使い分けが難しいと感じる人も多いのではないでしょうか?いざ使う場面でなんとなく使うっていうことがないようにしっかりと違いを理解しておくようにしましょう。

タイトルとURLをコピーしました