1.接口一定是抽象的,abstract可写可不写,含义完全相同。
2.接口只能用public或默认的访问限制修饰符来修饰。
3.接口中的变量隐含是 public static final的。即使不显式的使用关键字修饰,编译时也会自动为其加上。
4.接口中的方法一定是公有(public)和抽象(abstract)的,一定不能是静态(static)和最终(final)的。
5.接口引用可以指向间接或直接实现该接口的所有类的对象。
6.接口引用间相互赋值需要满足一定的规则,与类引用间的相互赋值类似,如下所列:
子接口引用可以直接赋给父接口引用;
父接口引用赋给子接口引用时需要进行强制类型转换;
其他没有继承关系类型的接口引用也需要进行强制类型转换。
7.类引用与接口引用间的赋值规则如下:
类引用赋给接口引用不需要进行强制类型转换,编译时检查类是否直接或间接实现了该接口,若是则编译通过, 可以运行;
接口引用赋给类引用要进行强制类型转换,并且目标类必须实现了该接口,才能通过编译,若运行时对象不符合则报异常。
8.接口与抽象类在具体含义上有很大的不同,抽象类更看重其是什么及其本质,而接口更注重其具有什么样的功能及其能充当什么样的角色。
9.下面列出了类与接口的引用指向对象时的区别:
继承只能让超类引用指向与其属于同一类的对象,例如肉类引用只能指向属于肉类的对象;
接口引用则可以指向任何类的对象,即使对象间没有任何关系,只要这些对象所在的类实现了该接口即可。