一、理解

        1、interface:接口
        2、使用说明:
1.接口使用interface来定义。
2.在java中,接口和类是并列的两个结构。
3.如何定义接口:定义接口的成员

3.1、jdk7.0及以前:只能定义全局常量和抽象方法
全局常量:public static final ,但是public static final可以省略
抽象方法:public abstract ,可以省略不写。


3.2、jdk8.0:除了能定义全局常量和抽象方法,还可以定义静态方法和默认方法

 4.接口不能定义构造器!意味着接口不能实例化
5.Java开发中,接口通过类去实现(implements)的方式来使用。
如果实现类覆盖(实现了接口中的所抽象方法),则此实现类可以实例化。
如果实现类没覆盖(实现接口中的所抽象方法),则此实现类仍为抽象类。

6.java类可以实现多个接口——>弥补了java的单继承性。
格式:class AA extends BB implements CC,DD,EE{}

7.接口与接口之间可以继承,而且可以多继承。

8.接口的使用具体体现了多态性。

9.接口,实际上可以看做一种规范。

二、举例

public class UsbTest {
    public static void main(String[] args) {
        Computer c = new Computer();
        //1.接口实现非匿名实现类的非匿名对象
        Flash f = new Flash();
        c.method(f);
        //2.接口实现非匿名实现类的匿名对象
        c.method(new Printer());
        
        //3.接口实现匿名实现类的非匿名对象
        Usb u = new Usb(){

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

            @Override
            public void stop() {
                System.out.println("手机结束工作");
            }
            
        };
        c.method(u);
        //3.接口实现匿名实现类的匿名对象
        c.method(new Usb(){

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

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

interface Usb{
    void start();
    void stop();
}

class Flash implements Usb{

    @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 method(Usb usb){//Usb usb = new Flash()/new Printer()
        usb.start();
        System.out.println("设备进行工作");
        usb.stop();
    }
}

运行结果:

java中interface怎么调用 interface在java中的用法_java

 

注意点:

        接口的使用过程中:
                1.接口的使用,也满足多态性
                2.接口看作一种规范
                3.开发中,注意面向接口编程

    三、体会面向接口编程的思想

        在应用程序当中,我们调用的都是JDBC当中定义的接口,不会出现某个数据库厂商的API文档。

四、Java8中关于接口的新规范

1:接口中定义的静态方法,只能通过接口本身调用
2:可以通过实现类的对象,调用接口中的默认方法。实现类可以重写接口中的默认方法。如果实现类的对象调用覆盖的方法,实现类的对象运行的仍然是实现类中重写了的默认方法。
3:如果子类(实现类继承的父类中与实现接口中同名同参数的方法时(且这个方法子类(实现类)并没重写),默认调用的是父类的方法——>类优先原则
4:如果实现类同时实现多个接口,这多个接口中同名同参数的默认方法时,在实现类没重写默认方法的情况下,实现类会报错——>接口冲突。那么此时,实现类中就必须重写这个默认方法
5:如何在子类(或实现类中调用自己重写的方法、父类、接口中被重写的方法

public void myMethod(){
        method3();//调用子类重写的方法
        super.method3();//调用父类中被重写的方法
        //调用接口中被重写的默认方法
        CompareA.super.method3();
        CompareB.super.method3();
    }

5.面试题

1、抽象类与接口的异同?
        相同点:都不能实例化,可以被继承。
        不同点:
                1)抽象类有构造器,接口不能定义构造器。
                2)抽象类可以定义抽象方法,子类重写后使用。接口(jdk7、jdk8、jdk9新特性)
                3)类:单继承;接口:多继承
                      类与接口:多实现