Javaの基本-インターフェース(インターフェース)

インターフェースの使用

  1. インターフェイスは、インターフェイスを使用して定義されます。

  2. インターフェイスの定義方法、インターフェイス
    2.1 jdk7以前のメンバーの定義、グローバル定数と抽象メソッドのみを定義できます
    グローバル定数:public static final ...省略可能
    抽象メソッド:publicabstract …省略可能

    2.2 jdk8:グローバル定数と抽象メソッドの定義に加えて、静的メソッドとデフォルトメソッドを定義することもできます

  3. コンストラクターをインターフェースで定義することはできません。つまり、インターフェースをインスタンス化することはできません。(抽象クラ​​スはコンストラクターを定義できますが、インスタンス化することはできません)

  4. Java開発では、インターフェースはクラス(実装)を介して実装されます。
    実装クラスがインターフェイスのすべてのメソッドを実装する場合、この実装クラスをインスタンス化できます。それ以外の場合、クラスは抽象クラスのままです。

  5. Javaクラスは複数のインターフェースを実装できます-> Javaクラスの単一継承の制限を補うために
    フォーマット:クラスAはBを拡張しC、Dを実装します

  6. インターフェイスとインターフェイスは直接継承でき、多重継承が可能です。

  7. インターフェイスの特定の使用法は、ポリモーフィズムを反映しています

  8. インターフェースは、実際には一種の仕様と見なすことができます

  9. インターフェイス指向プログラミングの開発経験
    10.インターフェイスの匿名実装クラスを作成します

package com.example;

public class InterfaceTest {
    
    
    public static void main(String[] args) {
    
    
        Plane p = new Plane();
        p.fly();
    }
}

interface Flyable {
    
    
    //全局常量
    public static final int MAX_SPEED = 7900;//第一宇宙速度
    int MIN_SPEED = 1;

    //抽象方法
    public abstract void fly();

    void stop();

}

interface Attackable {
    
    
    void attack();
}

class Plane implements Flyable {
    
    
    @Override
    public void fly() {
    
    

    }

    @Override
    public void stop() {
    
    

    }
}

abstract class Rocket implements Flyable, Attackable {
    
    
    @Override
    public void fly() {
    
    

    }
}

interface AA{
    
    

}

interface BB{
    
    

}

interface CC extends AA, BB{
    
    

}

ポリモーフィズム、規範

package com.example;

public class USBTest {
    
    
    public static void main(String[] args) {
    
    
        Computer c = new Computer();
        //1. 创建接口的非匿名实现类的非匿名对象
        Flash f = new Flash();
        c.transferData(f);

        //2. 创建接口的非匿名实现类的匿名对象
        c.transferData(new Printer());

        //3. 创建接口的匿名实现类的非匿名对象

        USB p = new USB() {
    
    
            @Override
            public void start() {
    
    
                System.out.println("p start");
            }

            @Override
            public void stop() {
    
    
                System.out.println("p stop");
            }
        };
        c.transferData(p);

        //创建接口的匿名实现类的匿名对象
        c.transferData(new USB() {
    
    
            @Override
            public void start() {
    
    
                System.out.println("start");
            }

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

}

interface USB {
    
    
    void start();

    void stop();
}

class Flash implements USB {
    
    
    @Override
    public void start() {
    
    
        System.out.println("Flash start");
    }

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

class Printer implements USB {
    
    
    @Override
    public void start() {
    
    
        System.out.println("Printer start");
    }

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

class Computer{
    
    

    public void transferData(USB usb){
    
    
        usb.start();
        System.out.println("transfer data");
        usb.stop();
    }
}

jdk8のインターフェースの新機能、静的メソッド、デフォルトメソッド。

public interface CompareA {
    
    
    //静态方法,public可省
    public static void method1(){
    
    
        System.out.println("compareA:北京");
    }

    //默认方法,public可省
    public default void method2(){
    
    
        System.out.println("compareB:上海");
    }

    default void method3(){
    
    
        System.out.println("compareB:上海");
    }
}

public class SubClassTest {
    
    
    public static void main(String[] args) {
    
    
        SubClass s = new SubClass();

        //s.method1();
        //1.接口中定义的静态方法,只能通过接口来调用。(为了消灭工具类)
        CompareA.method1();
        //2.通过实现类的对象,可以调用接口中的默认方法。
        //如果实现类重写了接口中的默认方法,调用时,调用的是重写以后的方法。
        s.method2();
        s.method3();
        //3. 如果子类(或实现类)继承了父类和实现的接口中声明的同名同参的方法。--> 类优先原则
        //4. 如果实现类实现了多个接口,而这些接口中定义了同名同参的默认方法。
        //那么在实现类中没有重写此方法的情况下,报错。-->接口冲突。
    }
}

class SubClass implements CompareA {
    
    

    @Override
    public void method2() {
    
    
        System.out.println("SubClass:上海");
    }
    //5. 如何在子类中调用接口中被重写的方法
    public void myMethod(){
    
    
        CompareA.super.method2();
    }
}

おすすめ

転載: blog.csdn.net/AmorFati1996/article/details/108721043