对java的interface的理解

一个例子来让我们理解更加深刻

这是我们的整体文件布局

①A是接口

②B和C是用来实现接口的类

③show是我们的运行函数,用来展示


A接口

接口中定义的方法可以不用去实现,用其他类去实现(必须实现)  

关键字:interface 

public interface A {
//    public static final String str = "我是A接口";  可简写为下面 理解为一个常量
    String str = "我是A接口";
//    public abstract void doa(); 可简写为下面
    void doa();
}

B类(用来实现A接口)

关键字:implements 

public class B implements A{
    @Override
    public void doa() {
        System.out.println("我是B类");
    }
}

C类(用来实现A接口)

关键字:implements 

public class C implements A{
    @Override
    public void doa() {
        System.out.println("我是C类");
    }
}

定义完成后我们用我们的show来展示一些

show类

这里我们用了B类来实现我们的接口,因此调用显示为“我是B类”

public class show {
    public static void main(String[] args) {
        A a = new B();
        a.doa();
    }
}

我们把B改成C试试

public class show {
    public static void main(String[] args) {
        A a = new C();
        a.doa();
    }
}

显示的我是C类

所以我们就可以很方便的调用两个不同的方案来实现我们的功能,很方便

扩展

我们还可以在里面定义好函数,不用再去实现类中实现它(!!!注意和之前的区别,之前的不同,之前的是在实现类中必须实现)

     /**
     * 1、默认方法:必须使用default修饰,默认会被public修饰
     * 实例方法:对象的方法,必须使用实现类的对象来访问。
     */
default void test1(){
        System.out.println("===默认方法==");
        test2();
    }

    /**
     * 2、私有方法:必须使用private修饰。
     *   实例方法:对象的方法。
     */
    private void test2(){
        System.out.println("===私有方法==");
    }

    /**
     * 3、静态方法:必须使用static修饰,默认会被public修饰
     */
     static void test3(){
        System.out.println("==静态方法==");
     }

接口可以继承多个

interface A{
    void test1();
}
interface B{
    void test2();
}
interface C{}

//比如:D接口继承C、B、A
interface D extends C, B, A{

}

但是实现的时候也必须全部实现

//E类在实现D接口时,必须重写D接口、以及其父类中的所有抽象方法。
class E implements D{
    @Override
    public void test1() {

    }

    @Override
    public void test2() {

    }
}