接口
在Java中,接口不是类,而是对希望符合这个接口的类的一组需求。
接口中的所有方法都是自动是public方法。因此,在接口中声明方法,不用提供关键字public。
实现接口时,必须把方法声明为public。否则,编译器会认为这个方法是包可见性的(类的默认访问属性),之后编译器会报错,提示应该提供更严格的访问权限。
接口可以定义常量。但是不能有实例字段。
接口中的字段总是public static final
在Java 8之前,接口中绝对不会实现方法(8之后可以在接口中提供简单方法。但是这些方法不能引用实例字段)
提供实例字段和方法实现,应该由实现接口的那个类来完成。
因此,可以将接口看成没有实例字段的抽象类。但是两者还是有一定区别的。
接口不是类。不能用new运算符实例化一个接口。
但是可以声明接口的变量:Comparable x;
接口变量必须引用实现了这个接口的类对象:
x = new Employee(...); // 这里Employee implements Comparable
接口可以继承多个接口
面试题
接口和抽象类的区别是什么?
接口中所有的方法隐含的都是抽象的。而抽象类则可以同时包含抽象和非抽象的方法。
类可以实现很多个接口,但是只能继承一个抽象类
类可以不实现抽象类和接口声明的所有方法,当然,在这种情况下,类也必须得声明成是抽象的。
抽象类可以在不提供接口方法实现的情况下实现接口。
Java接口中声明的变量默认都是final的。抽象类可以包含非final的变量。
Java接口中的成员函数默认是public的。抽象类的成员函数可以是private,protected或者是public。
接口是绝对抽象的,不可以被实例化,抽象类也不可以被实例化。