【JAVA】コネクタ

13294 ワード

まず質問ですが、なぜインタフェースが必要ですか?例を見てください:需要:防犯ドアの機能を実現することが要求されています.ドアには「開く」と「閉じる」の機能があり、すべての「鍵をかける」と「鍵を開ける」の機能があります.分析:まず防犯ドアはドアで、鍵があります.オブジェクト向けの考え方に従って,ゲートをそれぞれ抽象クラスとして定義することができる.ただし、防犯扉が扉を引き継ぎながら鍵を引き継ぐことはできない.原因は2つある:1、防犯ドアは鍵ではなく、is aの関係に合わない.2、Javaは単一継承のみをサポートする.では、この問題をどう解決すればいいのでしょうか.このときインタフェースを使用し、ロックをインタフェースとして定義し、防犯ドアにドアを継承させ、ロックのインタフェースを実現することができます.
では、インタフェースとは何ですか.その特徴は何ですか.私たちは一歩一歩勉強します.
生活の中で、インタフェースは1セットの規範で、この規範を満たす設備で、それらを組み合わせて、それによってその設備の機能を実現することができます.USBインタフェースを例に、インタフェースの意味を学びます.USBインタフェースは実際には一部の企業や組織などが制定した約束や標準であり、インタフェースの大きさ、形状、各ピン信号の範囲と意味、通信速度、通信フローなどを規定し、この約束や標準に従って各種設備を設計し、例えばUディスク、USBファン、USBキーボードがUSBポートに挿入されて正常に動作する.
ソフトウェアでは、インタフェースは同様に規範と標準であり、クラスの動作を制約することができ、いくつかの方法の特徴の集合であるが、方法の実現はない.この角度から言えば、インタフェースは特殊な「抽象クラス」と見なすことができるが、抽象クラスとは全く異なる文法を採用して表現し、両者の設計理念も異なり、抽象クラスはコードの多重化に有利であり、インタフェースはコードの拡張とメンテナンスに有利である.
インタフェース構文:
//       :

[   ] interface     extends    1、   2,……{
    //    
    //    
}

//          
//        :
class    extends     inplements   1,  2……{
    //   
}
//           

インタフェースの特徴:
1、インタフェースの命名規則はクラスと同じです.修飾子がpublicの場合、インタフェースはプロジェクト全体に表示され、修飾子を省略すると、インタフェースは現在のパッケージにのみ表示されます.2、インタフェースには東の定数で、変数を定義できません.インタフェースのプロパティはpublic static finalで自動的に修飾されます.すなわち、インタフェースのプロパティはグローバル静的定数です.インタフェースの定数は、定義時に初期値を指定する必要があります.
//  
public static final int PI = 3.14;
int PI = 3.14;//    ,             
int PI;//  !           ,        

3、インタフェースのすべての方法は抽象クラスです.インタフェース内のメソッドはpublic abstractで自動的に修飾されます.すなわち、インタフェースにはグローバル抽象メソッドしかありません.4、抽象クラスと同様に、インタフェースもインスタンス化できず、インタフェースに構造関数が存在しない.5、インタフェース間はextendsによって継承関係を実現することができ、1つのインタフェースは複数のインタフェースを継承することができるが、インタフェースはクラスを継承できない.6、インタフェースの実装クラスはインタフェースのすべての方法を実装しなければならない.そうしないと抽象クラスとして定義しなければならない.
インタフェースとインタフェースの特徴を理解して、ここで私达はまた1つの概念を理解します:インタフェースは1种の能力が前に言った防犯ドアの実例を通じて、私达は详しく说明します:防犯ドアは1つのドアで、is aの関系に合って、1つのドア类を抽象化することができます.防犯ドアには「鍵をかける」と「鍵を開ける」能力があることを表す鍵があり、has a(組合せ関係)の関係を表す.ここでは鍵をインタフェースとして定義し、防犯ドアにドアクラスを継承して鍵インタフェースを実現させることができる.
具体的な手順:
  • 抽象クラスDoorを定義し、オンとオフの機能を備えている.
  • はロックインタフェースを定義し、「ロック」と「ロック解除」の能力を備えている.
  • TheftproofDoorクラスを定義し、Doorクラスを継承しながらロックインタフェースを実現する.
  • はテストクラスを編纂し、防犯ドアの開閉と施錠、開錠の機能を実現する.
  • //     、  
    public abstract class Dooe{
        public abstract void open();//  
        public abstract void close();//  
    }
    
    //     
    public interface Lock{
        void lockUp();//  
        void openLock();//  
    }
    
    //      、  Door ,  Lock  
    public TheftproofDoor extends Door implements Lock{
        @ovreride
        public void lockUp(){
            System.out.println("     ,  ");
        }
        @ovreride
        public void openLock(){
            System.out.println("     ,  ");
        }
        @ovreride
        public void open(){
            System.out.println("    ,  ");
        }
        @ovreride
        public void close(){
            System.out.println("    ,  ");
        }
    }
    
    //   
    public statci void main(String[] args){
        //       
        TheftproofDoor tfd = new TheftproofDoor();
        tfd.close();//  
        tfd.lockUp();//  
        tfd.openDoor();//  
        tfd.open();//  
    }
    
    OutPut:
        ,  
         ,  
         ,  
        ,  

    例を挙げると、インタフェースが能力である理由をより明確に理解することができます.1つのクラスがあるインタフェースを実現すると、このクラスが何らかの能力を備えていることを示し、防犯ドアが実現したロックのインタフェースは、防犯ドアがロックを解除する能力を持っていることを示します.クランプ、大工は誰かを指すのではなく、能力を代表しています.クランプ、大工を募集するのは、その能力を備えた人を募集することです.だから生活の中で一人で多くの能力を備えることができて、プログラムの1つのクラスも複数のインタフェースを実現することができます.
    インタフェースは、プリンタの印刷機能を実現する必要があるという約束の問題を示します.プリンタのインクカートリッジはカラーでも白黒でも可能で、A 4、B 5など様々なタイプの用紙を使用できます.また、インクカートリッジや用紙はプリンタメーカーが提供していないので、プリンタメーカーはどのようにして自分のプリンタが市場のインクカートリッジや用紙と一致しないことを避けることができますか?分析:この問題を効果的に解決する方法は、インクカートリッジ、紙の約束または基準を指定し、プリンタメーカーが約束通りにインクカートリッジ、紙をサポートし、最後にどのメーカーが提供したインクカートリッジまたは紙を使用しても、統一された約束に合致すれば、プリンタは印刷できます.Javaのインタフェースは約束を表します.
    Javaによるプリンタ印刷の具体的な手順:
  • インクカートリッジインタフェースInkBoxを定義し、インクカートリッジの標準を規定する.
  • 紙インタフェースPaperを定義し、紙の基準を規定する.
  • プリンタクラスを定義し、インクカートリッジインタフェース、用紙インタフェースを参照して印刷機能を実現する.
  • インクカートリッジメーカーはInkBoxインタフェースに従ってColorInkBoxクラスとGrayInkBoxクラスを実現する.
  • 紙メーカーはPaperインタフェースに従ってA 4 Paper類とB 5 Paper類を実現する.
  • プリンタを「組み立てる」ことで、プリンタが異なるインクカートリッジと用紙で印刷機能を実現します.
  • //      
    public interface InkBox{
        //return     
        public String getColor();
    }
    
    //      
    public interface Paper{
        //return     
        public String size();
    }
    
    //      
    public class Printer{
        InkBox inkBox; //  
        Paper paper;   //  
    //       
    public void setInkBox(InkBox inkBox){
            this.InkBox = inkBox;
        }
    //       
    public void setPaper(Paper paper){
            this.paper = paper;
        }
    
    //         
    public void print(){
        System.out.println("  "+inkBox.getColor()+"   "+paper.getSize()+"    。");
        }
    }
    
    //      InkBox    ColorInkBox  GrayInkBox 
    
    //     
    public class ColorInkBox implements InkBox{
        public String getColor(){
            return "  ";
        }
    } 
    
    //     
    public class GrayInkBox implements InkBox{
        public String getColor(){
            return "  ";
        }
    }
    
    //      Paper    A4Paper  B5Paper 
    
    //A4  
    public class A4Paper implements Paper{
        public String getSize(){
            return "A4";
        }
    }
    
    //B5  
    public class B5Paper implements Paper{
        public String getSize(){
            return "B5";
        }
    }
    
    //“  ”   ,                    。(   )
    
    public static void main(String[] args){
        //1、     
        InkBox inkBox = null;//      
        Paper paper = null;  //      
        Printer printer = new Printer();//               
    
        //2、       A4    
        inkBox = new GrayInkBox();//         
        paper = new A4Paper();//  A4    
        printer.setColor(inkBox);//       
        printer.setSize(paper);//       
        printer.print();//      
    
        //3、       B5    
        inkBox = new ColorInkBox();
        paper = new B5Paper();
        printer.setColor(inkBox);//       
        printer.setSize(paper);//       
        printer.print();//      
    
        //4、       A4    
        paper = new A4Paper();
        printer.setSize(paper);
        printer.print();//      
    }
    
    outPut:
           A4    
           B5    
           A4    
               ,           、    ,        ,             ,         ,       ,            。
              ,         ,       ,            ,             。
             ,                            ,      ,              。
                           ,             ,              ,      。
                        ,         。         ?    ,                              ,          ,            。          ,            。                  ,         。
             ,       ,Printer         InkBox   Paper  ,                    ,           ,          ,      。          ,         GrayInkBox B5Paper,             ,       ColorInkBox    ,           、      。
                        ,        ,           ,              。          :     ,        ,         ,                      。