接口中的成员只能是公有、静态、常变量,即它必须(自动)拥有public、static和final的联合属性,接口中的方法只能是公有的抽象方法,即必须(自动)拥有public和abstract的联合属性!
就是说就算不加修饰符,依旧会被认定为拥有以上所说的联合属性!如下所示:
public interface MyFirstInterface {
public static final int MAX_NUM = 200;
int ac= 3;
String stringOne = "这是一个静态只读字符串!";
public abstract int fun1();
String fun2(int str1, String str2);
}
即ac与stringOne均存在public、static以及final属性,fun2()也拥有public和abstract属性。
一个接口的实现类类似于接口的子类,但是一个子类可以有不止一个的接口,这点与继承不同,继承所派生的子类只能有一个父类!还有这个子类必须实现所有接口的所有抽象方法,否则这个类依旧是一个抽象类。
接口的子类所实例化的对象均属于它的每个接口以及本类。如下:
InterfaceMyFirstInterface imfi1 = new InterfaceMyFirstInterface();
System.out.println(imfi1.fun1());
System.out.println(imfi1 instanceof InterfaceMyFirstInterface);
System.out.println(imfi1 instanceof MyFirstInterface);
System.out.println(imfi1 instanceof MySecondInterface);
实现了这个接口的类可以调用这个接口的所有成员及方法:
关于default关键字
关于default这个关键字主要使用在接口中,它的作用是使得这个接口的方法可以存在方法体,即非abstract方法。可以在接口中提前编写已经确定的方法逻辑。
default void initView() {
init();
dealAction();
}
如上所示,在default关键字下可以编写方法体,且方法里可以调用接口中的未实现的方法。