接口就是一种公共的规范标准,只要符合规范标准,大家都可以通用
Java中的接口更多的体现在堆行为的抽象。
接口的特点:
接口用关键字interface修饰
public interface 接口名{}
实现用 implements
接口的成员特点
变量的默认修饰符:public static final
接口没有构造方法
接口的方法默认修饰符:public abstract
在JDK8中可以用默认修饰,和静态static修饰。
类与接口的关系
类与类之间只能单继承
类与接口之间只能单继承,但能多实现
接口与接口之间能多继承
接口和抽象类的区别
接口(interface)可以说成是抽象类的一种特例,接口中的所有方法都必须是抽象的。接口中的方法定义默认为public abstract类型,接口中的成员变量类型默认为public static final (这里需要说一点,既然一个变量被final修饰了,那么这个变量就是一个常量!!!变量必须初始化成常量!!!)
下面比较一下两者的语法区别:
1.抽象类可以有构造方法,接口中不能有构造方法。
2.抽象类中可以有普通成员变量,接口中没有普通成员变量!!!(注意重点在 普通 即 非静态 和 变量!!!)
3.抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。
4. 抽象类中的抽象方法的访问类型可以是public,protected和(默认类型,虽然eclipse下不报错,但应该也不行),但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。
5. 抽象类中可以包含静态方法(static),接口中不能包含静态方法.
6. 抽象类和接口中都可以包含静态成员变量(static),抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public static final类型。
7. 一个类可以实现多个接口,但只能继承一个抽象类。
何时用接口,何时用抽象类?
子类继承抽象类就不能再继承其他类(java的单继承原则),所以有抽象方法时优先使用接口定义.
如果所有方法都没有实现,优先使用接口.
一些方法已经可以实现,而另一些方法无法或不想实现时,且继承(实现)关系很简单时,考虑用抽象类定义,留给后代去实现。jdk8之后,也可以在接口中定义default方法或static方法来实现.