接口中除了抽象方法没有方法体,默认方法,静态方法都有
接口,是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();
}
}
私有方法的使用
- 私有方法:只有默认方法可以调用。
- 私有静态方法:默认方法和静态方法可以调用。
如果一个接口中有多个默认方法,并且方法中有重复的内容,那么可以抽取出来,封装到私有方法中,供默认方法去调用。从设计的角度讲,私有的方法是对默认方法和静态方法的辅助。
定义接口:
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);