JAvaoop-インタフェース(day 09)

8762 ワード

インタフェースはいくつかの機能を定義するだけで、具体的な実現がないので、抽象的で、抽象的ないくつかの特性を満たしています.例えば:1.直接実例化することはできず、多態の方式しか採用できない.サブクラスすべてのインタフェース内の抽象メソッドを書き換える(サブクラスが親の抽象メソッドを強制的に書き換える必要があるのと同じ理屈)推奨:インタフェースのサブクラスは実装クラスであり、すべてのインタフェースメソッドを書き換える**
/*
         :
        A:      interface   
            interface     {}
    class,       
        B:      implements  
            class    implements     {}
        C:       
              ,        ?
                       。
        D:     
            a:      。      。
            b:      。             。(    )

        :
        A:     (    )
        B:     (  )
        C:    (   )
*/
//        
interface AnimalTrain {
    public abstract void jump();
}

//       
abstract class Dog implements AnimalTrain {
}

//       
class Cat implements AnimalTrain {
    public void jump() {
        System.out.println("      ");
    }
}

class InterfaceDemo {
    public static void main(String[] args) {
        //AnimalTrain    ;      
        //AnimalTrain at = new AnimalTrain();
        //at.jump();

        AnimalTrain at = new Cat();
        at.jump();
    }
}

*インタフェースのメンバー変数*デフォルトは定数です.finalキーワードで修飾された変数と同じです.インタフェース名で変数にアクセスできます.インタフェースのデフォルトはstaticのデフォルト修飾子です.public static final****のすべてのクラスはデフォルトでクラス:Objectから継承されます.objectは無パラメトリック構築メソッドObject()のみを提供するため、サブクラスが継承する親クラスはデフォルトで親クラスを継承する無パラメトリック構築メソッドインタフェースメソッドはマスターを持たないため、すべてのインタフェースメソッドは抽象的なサブクラス書き換えインタフェースメソッドである必要がありますpublicインタフェースメソッドはデフォルトでpublic abstractです.
/*
          
        **    **;     ,      。
                     :public static final
                  :      。
        **    **:        。
        **    **:       。
                     :public abstract
                  :      。

                 :Object。
      Object          。       Object     。
*/
interface Inter {
    public int num = 10;
    public final int num2 = 20;
    public static final int num3 = 30;

    //  :   
    //public Inter() {}

    //          ,               
    //public void show() {}

    //abstract void show(); //  public
    public void show(); //  abstract
}

//   +Impl             
/*
class InterImpl implements Inter {
    public InterImpl() {
        super();
    }
}
*/

class InterImpl extends Object implements Inter {
    public InterImpl() {
        super();
    }
    //           public
    public void show() {}
}

//   
class InterfaceDemo2 {
    public static void main(String[] args) {
        //    
        Inter i = new InterImpl();
        System.out.println(i.num);//10
        System.out.println(i.num2);//20
        //i.num = 100;
        //i.num2 = 200;
        //System.out.println(i.num); //       num   ,           
        //System.out.println(i.num2);//       num2   
        System.out.println(Inter.num);//            ,       static 
        System.out.println(Inter.num2);
        System.out.println("--------------");
    }
}

インタフェースのまとめ:クラスとインタフェースは実装関係であり、クラス継承クラスは単一の継承しかできないが、クラス実装インタフェースは複数のインタフェースがあり、中間はカンマで区切られている.クラスは1つのクラスを継承するだけでなく、1つのインタフェースを実装することもできます.注意:複数のインタフェースを継承すると、対応するインタフェースが対応する方法を実装し、間違えないでください.インタフェースとインタフェースの継承関係は、単独で継承してもよいし、複数で継承してもよい.interface Sister extends Father,Mother
/*
       :
            ,     ,      。
        :
            ,     ,      。
                            。
         :
            ,     ,      。
*/
interface Father {
    public abstract void show();
}

interface Mother {
    public abstract void show2();
}

interface Sister extends Father,Mother {

}

//class Son implements Father,Mother //   
class Son extends Object implements Father,Mother {
    public void show() {
        System.out.println("show son");
    }

    public void show2() {
        System.out.println("show2 son");
    }
}

class InterfaceDemo3 {
    public static void main(String[] args) {
        //    
        Father f = new Son();
        f.show();
        //f.show2(); //  

        Mother m = new Son();
        //m.show(); //  
        m.show2();
    }
}