Java インタフェース概要

2008/10/10 14:17Update
TAGS: Java | インタフェース

Java インタフェース概要、定義方法、実装(継承)方法及びそのメリットについて学びます。

インタフェースとは


Java言語のインタフェースは、機能の概要しかを記述しないもので、定数と抽象メソッドしか持てません。
もし、クラスは「機能の概要:何をするか」と「機能の実装:どうするか」の組み合わせであれば、インタフェースは「機能の概要:何をするか」を定義するだけです。

Javaインタフェースの定義


例:
public interface TestInterface {
    String DEFAULT_KEY = "name";     //修飾子の付かないものも、public static finalの定数と見なす
    public static final String  DEFAULT_VALUE = "hello";
    
    void print1();                      //public abstract と見なす
    public void print2();
    //public static void print3();    //インタフェースのメソッドにstatic修飾子をつけることはできない
    public abstract void print4();    //abstractが修飾可能
}


1、インタフェースの定義について
[public][abstract] + interface + インタフェース名

※1)interfaceに省略可能なpublicやabstract修飾子が使用可能です。
※2)publicが省略された場合、同じパッケージ内からしかアクセスできません。
※3)protectedやprivateをつけません

2、インタフェースのメンバー変数について
※1)すべての「変数」は「public static final」です。
※2)「public」「static」「final」修飾子のいずれかもしくは全部を省略してもかまいません。
※3)定数となりますので、初期値を設定しなければなりません。

3、インタフェースのメソッドについて
※1)すべてのメソッドはpublic abstract と見なされます。
※2)public abstract修飾子のいずれかもしくは全部を省略してもかまいません。
※3)static修飾子をつけることはできません。
※4)メソッドが本体を持つことができません。

Javaインタフェースの継承


public interface A {
    public void a();
}

public interface B {
    public void b();
}


親インタフェースの定義を継承するには「extends」を用います。
例:
public interface C extends A {
    public void c();
}


また、インタフェース間の多重継承もできます。
例:
public interface AB extends A, B {
    public void ab();
}


Javaインタフェースの実装



インターフェースはクラスによって実装(implements)されます。
例(インタフェース定義):
public interface A {
    public void a();
    public void aa();
}


インタフェースをクラスによって実装するには、「implements」を用います。
例(クラスによってインタフェース実装):
public class ClassA implements A{
    public void a() {
        System.out.println("It's a method!");
    }

    public void aa() {
        System.out.println("It's aa method!");
    }
}


また、インタフェースのメソッドの一部しか実装しない場合、クラスをabstractにする必要があります。
例:
public abstract class ClassA implements A{
    public abstract void a();

    public void aa() {
        System.out.println("It's aa method!");
    }
}



クラスの継承は一つのクラスからしかできませんが、インタフェースの実装は複数のインタフェースからできます。
そのため、継承するすべてのインタフェースのメソッドを実装する必要があります。
例:
public class ClassA implements A, B {
    //implement A.a()
    public void a() {
        //...
    }

    //implement A.aa()
    public void aa() {
        //...
    }

    //implement B.b()
    public void b() {
        //...
    }
}


インタフェースのメリット


◇ 標準化。インタフェースを実装したすべてのクラスは同じ振る舞いを得られます。
◇ 多重継承(実装)。Javaでは、クラスからの多重継承はできませんが、インタフェースならできます。
◇ 抽象化。インタフェースは「機能の概要」だけを持つ、本体を持たないもので、機能の抽象化を専念させることができます。
◇ 疎結合。インターフェース指向のプログラミングでは、利用する側は、インタフェースの実装内容を意識する必要がありません。インタフェースの実装が変わっても、利用する側は変わる必要がありませんので、各コンポーネント間の結合が疎になり、再利用性・保守性が高くなります。

有关作者
Syboos.jp編集長AJavaやオープンソース情報の執筆、Webサイトの開発や運営全般の業務に携わる。

Sponsored Link


Comments

用户名 (required)

Email (will not be published) (required)

URL

Evaluation