ためになるホームページ お問い合わせ




TOP > Java > インタフェースの宣言と実装
インタフェースの宣言
  • インタフェースを作成するときは、クラスが「何を行うか」取り決めを行う。
  • インタフェースはどの継承ツリーのどのクラスでも実装できる。
  • 実装クラスでは、全てのインタフェースメソッドを実装しなければならない。この時、実装メソッドは、必ず「public」修飾子を付けなければならない。
  • インタフェース内のメソッドは必ず、抽象クラスとなる。
  • インタフェースアクセスレベルは変更(デフォルト、public)できる。尚、省略できるが、インタフェースは必ずabstractになる。
  • インタフェース内のメソッドはpublicかつabstractとなる。尚この二つは省略できる。また、abstractが暗黙的に付くので、「final」「synchronized」「native」「strictfp」「static」と一緒に宣言することはできない。
  • インタフェース内の変数は、publicかつfinalかつstaticとなる。尚これら3つは省略できる。すなわち、インタフェース内の変数は定数となるので、必ず初期化しなければならない。
  • インタフェースは他のインタフェースを複数拡張できる。しかし、実装はできない。
  • インタフェースは多態性に使用できる。

  • インタフェースの宣言の例
    interface Test{
        void echo() ;
        int a = 1 ;
    }
    
    

    このコードは以下と一緒。

    インタフェースの宣言の例
    abstract interface Test{
        public abstract void echo() ;
        public final static int a = 1 ;
    }
    
    

    インタフェースの拡張の例
    interface Dog{
        void dog() ;
    }
    
    interface Cat{
        void cat() ;
    }
    
    interface Zoo extends Dog ,Cat {}
    
    

    インタフェースDogとCatをZooが拡張している。例えば、インタフェースZooを実装するクラスがTestだった場合、Testは、Dog・Cat・Zooの全てのメソッドを実装しなければならない。

    インタフェースの実装
  • 宣言されたインタフェースの全てのメソッドについて具象実装を持つ
  • オーバーライドに関する全ての規則に従う。
  • 実装メソッド上でチェック例外を宣言しない。(インタフェースメソッドで宣言されているものや、インタフェースメソッドで宣言されているもののサブクラスを除く)
  • インタフェースメソッドのシグネチャを維持し、同じ戻り値型を維持する。(但し、インタフェースメソッドの中で宣言されている例外を宣言する必要はない。)
  • 実装クラス自体を抽象クラスにできる。この場合、抽象クラスでメソッドを実装する必要はない。次の具象クラスで実装すればよい。

  • インタフェースの実装の例
    //インタフェースDog
    interface Dog{
        //抽象メソッド
        void dog() ;
    }
    
    //インタフェースCat
    interface Cat{
        //抽象メソッド
        void cat() ;
    }
    
    //インタフェースの拡張
    interface Zoo extends Dog , Cat{
        //抽象メソッド
        void zoo() ;
    }
    
    //インタフェースの実装
    //但し、抽象クラス
    abstract class Sub implements Zoo{
        //メソッドdog()を実装
        public void dog(){}
    }
    
    //はじめての具象クラス
    //ここで全ての抽象メソッドを実装しなければならない。
    class Test extends Sub{
        //zoo()メソッドの実装
        public void zoo(){}
        //cat()メソッドの実装
        public void cat(){}
        //dogメソッドは、Subクラスで実装しているのでここで実装しなくても
        //構わない
    }
    
    






    Copyright 2007 ためになるホームページ All Rights Reserved.