一、接口
1、在Java中,使用interface关键字来定义接口(注意:目前interface只支持public和abstract修饰符)。Java与C++不同,不支持多重继承,即一个类只能继承一个父类,但是可以实现多个接口。接口不能继承其它类,也不能实现其他接口,但是可以用extends关键字继承多个接口。
2、接口没有构造方法,因此,接口声明的对象不能被实例化,只能引用实现该接口的对象实例。
3、接口的成员变量默认修饰符都是public static final类型的,不能用其它修饰符修饰,同时必须被显示初始化。
4、接口里面的方法默认都是public abstract类型的。修饰符只能使用public,abstract,default,static和strictfp。(jdk 8开始支持接口定义静态方法)
5、一个类如果实现了一个接口,那么必须实现该接口中的所有抽象方法,否则该类必须声明为抽象类。
二、抽象类
1、不能直接使用抽象类生成对象,但可以通过new关键字生成对象并继承其所有抽象方法使用。
2、抽象类中可以声明一般的成员变量和方法。
3、抽象类的子类必须实现其父类的所有抽象方法,否则要将子类声明为抽象类。
三、接口和抽象类的区别
1、接口不能包含构造函数,抽象类可以声明构造函数,供其子类继承使用。
2、抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型的。
3、接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块和静态方法。(jdk 8之前)。
4、从设计层面上来说,抽象类是对一种事物的抽象,即对类抽象,而接口是对行为的抽象。