インターフェイスと抽象クラスの違いとインターフェイスjdk8の新機能

抽象クラスを比較する前のjdk8の特性
。1インターフェイスは、クラスと並列のインターフェイスで表されます。インターフェイスの定義とは、インターフェイスのメンバーを定義することを意味します
。2インターフェイスは、パブリック抽象メソッド(パブリック抽象)とグローバル静的最終変数(public final static)ですが、インターフェイスのメソッドとプロパティはこの方法でしか定義できないため、インターフェイスでは省略できます。インターフェイスには非抽象メソッドがないことがわかります。抽象クラスには抽象メソッドと通常のメソッドがあり
ます。3。インターフェイスは抽象ではありませんクラスはインスタンス化できません。抽象メソッドにはコンストラクタがありますが、インスタンス化できません
。4。インターフェイスは、クラスによって実装を実装することで使用できます。現時点では、インターフェイスを継承するクラスはすべて、インターフェイスの抽象メソッドを実装するか、抽象クラスとして宣言されます
。5、javaインターフェイスは、クラス(抽象クラ​​ス)の単一継承が不十分であることを補う以上のことを実現できます
。6、クラスとクラスの関係継承されます(継承is-aクラスとインターフェースの関係は実現です(インターフェースの実現はあなたはできるインターフェイス間の関係)、インターフェイスとインターフェイスの間には多重継承が存在する可能性があります
。7。インターフェイスは実際には一種の仕様ですが、ポリモーフィズムも反映します。インターフェイスはシステムアーキテクチャの設計方法でより多くの役割を果たし、主にモジュール間の定義に使用されます。通信契約。抽象クラスは、特定のものの共通性を抽出し、コードの再利用を実現でき、基本クラスに適したコード実装の役割を果たすことです。

インターフェイスの典型的なケース:
すべてのデータベース(mysql、orcle、sqlサーバー)に共通の操作のためのjdbcの典型的なアプリケーション、削除、変更、およびチェック...データベースインターフェイスを継承する形式を使用し、メソッド名を標準化および統合します。つまり、異なるデータベースは統一された機能を提供します(書き直しのために)同じメソッド名ですが、その内部実装の詳細はデータベースのタイプに関連しています。プログラマーは特定のメソッド本体に関連する必要はなく、必要なのはデータベース操作メソッドを巧みに呼び出して、作業を正常に完了します。逆に、仕様用のjdbcインターフェースがない場合、主要なデータベースベンダーは、非常に奇妙な文法APIをさまざまに作成し、最終的にはプログラマーが苦しみ、Javaエコロジーも汚染されます。

jdk8の新機能
グローバル定数と抽象メソッドの定義に加えて、デフォルトメソッドpublic default / defalutと静的メソッドpublicstatic / staticを定義することもできます。これらは、次の影響を及ぼします
。1。これにより、ツールクラスのステータスが脅かされます。たとえば、インターフェイスには次のようなものがあります。パブリック静的メソッドを使用すると、コレクション(インターフェイス)でコレクション(通常のクラス)を徐々に置き換えることができます。
2.インターフェイスのデフォルトのメソッドが誕生したため、インターフェイスのアダプタモードアダプタも削除されます。

interface USB{
    
    
    //相当于public static final String name = "USB";
    String name = "USB";
    //相当于public abstract void start();
    void start();
    void stop();
    //jdk8新特征
    public static void show(){
    
    
        System.out.println("这是USB接口");
    }
    //接口实现类或匿名实现类都可以调用
    default void say(){
    
    
        System.out.println("这个实现类是USB接口的实现类");
    }
}

class Flash implements  USB{
    
    
    public static final int a = 1;
    @Override
    public void start() {
    
    
        System.out.println("U盘开始工作");
    }

    @Override
    public void stop() {
    
    
        System.out.println("U盘结束工作");
    }
}

class Printer implements  USB{
    
    

    @Override
    public void start() {
    
    
        System.out.println("打印机开始工作");
    }

    @Override
    public void stop() {
    
    
        System.out.println("打印机结束工作");
    }
}

class Computer {
    
    
    public void transmit(USB usb) {
    
    
        usb.start();
        System.out.println("传输数据.......");
        usb.stop();
    }

    public static void main(String[] args) {
    
    
        Flash flash = new Flash();
        Computer computer = new Computer();
        computer.transmit(flash);

        //传入USB的匿名类对象参数的方式一
        USB phone = new USB() {
    
    
            @Override
            public void start() {
    
    
                System.out.println("手机传输开始");
            }

            @Override
            public void stop() {
    
    
                System.out.println("手机传输结束");
            }
        };
        computer.transmit(phone);
        //传入USB的匿名类对象参数的方式二
        computer.transmit(new USB() {
    
    
            @Override
            public void start() {
    
    
                System.out.println("MP3传输开始");
            }

            @Override
            public void stop() {
    
    
                System.out.println("MP3传输结束");
            }
        });

        //jdk8新特性测试
        USB.show();
        phone.say();
    }
}

運転結果
ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/wwwwwww31311/article/details/113172631