Java開発で最もよく使われるインタフェースについて

18575 ワード

インタフェース:
1:インタフェースもデータ型です.2:インタフェースは完全に抽象的です.(抽象クラスは半抽象)あるいはインタフェースは特殊な抽象クラスともいえる.3:インタフェースはどのように定義しますか.文法は何ですか.
          interface    {
  	}

4:インタフェースはマルチ継承をサポートし、1つのインタフェースは複数のインタフェースを継承することができる
//    
interface A1{

}
//      ,      
interface B1 extends A1{

}

5:インタフェースには2つの部分しか含まれていない、定数+抽象的な方法.インタフェースには他の内容はない6:インタフェースのすべての要素はpublic修飾されている(開示).7:インタフェースの抽象メソッド定義時:public abstract修飾子は省略できる.8:インタフェースのメソッドはすべて抽象的なメソッドであるため、インタフェースのメソッドはメソッド体を持つことができない.9:インタフェースの定数public static finalは省略できる.次のコードを参照してください.
//      
interface MyMath1{
    //   ,public static final     
    //public static final double PI = 3.1415926;
    double PI = 3.1415926;
    //    
    //public abstract int sum(int a,int b);
    //           ,          ,public abstract    
    //       
    int sum(int a,int b);

    //       
    int sub(int a,int b);
}

インタフェースの基本構文:
1:クラスとクラスの間を継承と呼び、クラスとインタフェースの間を実装と呼び、「実装」は「継承」継承がextendsキーワードで実現されると見なすことができるimplementsキーワードで完成する2:1つのクラスがインタフェースを実現する場合、インタフェースの抽象的な方法をすべて実現しなければならない.実装後の抽象的な方法で、修飾子はpublicです
public class test021 {
    public static void main(String[] args) {
        //  :            
        MyMath mm = new MyMathImpl();
        //        ,(      ),              ,             。
        int i = mm.sub(1,2);
        System.out.println(i);
    }
}

//      
interface MyMath{
    //  
    double PI = 3.1415926;

    int sum(int a,int b);

    int sub(int a,int b);
}

//     (    )
class MyMathImpl implements MyMath{

    //        
    public int sum(int a,int b){
        return a + b;
    }
    public int sub(int a, int b) {
        return a - b;
    }
}

インタフェースとインタフェースの間でマルチ継承がサポートされていますが、1つのクラスで複数のインタフェースを同時に実現できますか?可能ですが、インタフェース内のすべての方法を実装する必要があります.
public class test022 {
    public static void main(String[] args) {
        A a = new D();
        a.m1();
        //    ,       ,            ,           
        //       ,        classCastException  。
        //         ,  instanceof       
        B b2 = new D();
        if (b2 instanceof C){
            C c = (C)b2;
            c.m3();
        }
    }
}
interface A{
    void m1();
}

interface B{
    void m2();
}

interface C{
    void m3();
}

interface E{
    void m3();
}

//      
class D implements A,B,C{
    @Override
    public void m1() {

    }

    @Override
    public void m2() {
        System.out.println("m2....");
    }

    @Override
    public void m3() {
        System.out.println("m3....");
    }
}

継承も実装も存在する場合、コードはどのように書くべきですか?extendsキーワードは前、implementsキーワードは後
public class test023 {
    public static void main(String[] args) {
        Flyable am = new Cat();//  :            
        am.fly();
        //     
        Flyable pi = new Pig();
        //     fly()  ,        。
        pi.fly();
    }
}

//   :  
class Animal{

}

//      (     )
//        。(        )。        ,       ,       
//            
interface Flyable{
    void fly();
}

//  :     
//Flyable     ,        ,          ,      。
class Cat extends Animal implements Flyable{
    @Override //        
    public void fly() {
        System.out.println("      !   !!");
    }
}

//  ,        ,     Flyable  
//        ,       ,     ,     。
class Snake extends Animal{

}

class Pig extends Animal implements Flyable{
    @Override
    public void fly() {
        System.out.println("      !");
    }
}

インタフェースの開発における役割注意:インタフェースの開発における役割は、開発における多態の役割に似ている.多態:抽象プログラミング向け、具体的なプログラミング向けではなく、プログラムの結合度を下げ、プログラムの拡張力を高めるインタフェース:インタフェースプログラミング向け、プログラムの結合度を下げ、プログラムの拡張力を高め、ocp開発の原則に合致する.インタフェースの使用は多態機構から離れられず,(インタフェース+多態こそ結合度を低下させることができる)インタフェースは結合を解くことができ,誰と誰の結合を解くことができるのか.いずれのインタフェースにも呼び出し者と実装者があります.インタフェースは、呼び出し者と実装者をデカップリングすることができる.呼び出し者インタフェース呼び出しインプリメンテーション向けインタフェース記述
抽象クラスとインタフェースの違いは何ですか?抽象クラスは半抽象的である.インタフェースは完全に抽象的です.
抽象クラスに構築メソッドインタフェースがありますが、構築メソッドはありません.
インタフェースとインタフェース間のマルチ継承クラスとクラス間の単一継承のみをサポート
1つのクラスで複数のインタフェースを同時に実現できます.抽象クラスは1つのクラス(単一継承)しか継承できません.
インタフェースでは定数と抽象メソッドのみが許可されます.
注意:後でインタフェースは抽象クラスより多く使用されます.一般的に抽象クラスは使用されず、インタフェースは一般的に「動作」を抽象化します.