接口中除了抽象方法没有方法体,默认方法,静态方法都有

接口,是Java语言中一种引用类型,是方法的集合,如果说类的内部封装了成员变量、构造方法和成员方法,那么接口的内部主要就是封装了方法,包含抽象方法(JDK 7及以前),默认方法和静态方法(JDK 8),私有方法(JDK 9)。

接口的定义,它与定义类方式相似,但是使用 interface 关键字。它也会被编译成.class文件,但一定要明确它并不是类,而是另外一种引用数据类型。

引用数据类型:数组,类(String),接口。

接口的使用,它不能创建对象,但是可以被实现(implements ,类似于被继承)。一个实现接口的类(可以看做是接口的子类),需要实现接口中所有的抽象方法,创建该类对象,就可以调用方法了,否则它必须是一个抽象类。

非抽象子类实现接口:
1. 必须重写接口中所有抽象方法。
2. 继承了接口的默认方法,即可以直接调用,也可以重写。

Itest1.java

public interface Itest1 {
    //抽象方法,abstract关键字可省略
    abstract void method1();
    //默认方法
    default void method2() {
        System.out.println("default method");
    }
    //静态方法
    static void method3() {
        System.out.println("static method");
    }
}

接口中静态方法的使用

静态与.class 文件相关,只能使用接口名调用,不可以通过实现类的类名或者实现类的对象调用

Itest1Impl.java

public class Itest1Impl implements Itest1 {
    @Override
    public void method1() {
        System.out.println("abstract method");
    }

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

class Test {
    public static void main(String[] args) {
        new Itest1Impl().method1();
        new Itest1Impl().method2();
        Itest1.method3();
    }
}

Java接口中都是抽象方法嘛 接口中都是抽象方法吗_java-ee

私有方法的使用

  • 私有方法:只有默认方法可以调用。
  • 私有静态方法:默认方法和静态方法可以调用。

如果一个接口中有多个默认方法,并且方法中有重复的内容,那么可以抽取出来,封装到私有方法中,供默认方法去调用。从设计的角度讲,私有的方法是对默认方法和静态方法的辅助

定义接口:

LiveAble.java

public interface LiveAble {
    default void func(){
        func1();
        func2();
    }

    private void func1(){
        System.out.println("跑起来~~~");
    }

    private void func2(){
        System.out.println("跑起来~~~");
    }
}

常量的使用

直接使用接口名去调用

People.java

public interface People {
    public static final String life = "alive";
}

调用

System.out.println(People.life);