一种更加特殊的“抽象类”:接口
接口是把隐式公共方法和属性组合起来,以封装特定功能的一个集合。一旦类实现了接口,类就可以支持接口所指定的所有属性和成员。接口定义了某一批类所需要遵循的规范,接口不关心这些类的内部状态数据,也不关心这些类方法里的实现细节,他只规定这批类里必须提供哪些方法。
接口的使用规则:
1.接口的修饰符可以是public或者省略,如果省略了public访问控制符,则默认采用包权限访问控制符。
2.一个接口可以有多个直接父接口,但接口只能继承接口,不能继承类。
3.接口里不能包含构造器和初始化块定义。
4.实现接口的类就必须实现接口的所有方法和属性。
5.接口里的成员变量只能是静态final常量,如果不填,系统会自动为这些变量增加static和final修饰符
例如:int max=50;和public static final int max=50结果完全一样
6.接口里的方法只能是抽象方法,类方法或者默认方法。系统会自动为接口里的普通方法增加abstract修饰符。
7.接口里的所有成员都是public访问权限。
8.接口的继承使用extends关键字,类实现接口使用implements关键字
例如:
package lee;
import java.awt.print.Printable;
public interface Output {
int MAX_CACHE_LINE=50;
void out();
void getData(String msg);
default void print(String ...msgs){
for(String msg:msgs){
System.out.println(msg);
}
}
default void test(){
System.out.println("默认的test方法");
}
static String staticTest(){
return "接口里的类方法";
}
}
package yeeku;
public class OutputFieldTest {
public static void main(String[] args){
//可以调用,证明该成员变量是public修饰的
System.out.println(interfaceTest.lee.Output.MAX_CACHE_LINE);
//将引发“为final变量赋值”的异常
//interfaceTest.lee.Output.MAX_CACHE_LINE=20;
System.out.println(interfaceTest.lee.Output.staticTest());
}
}