接口与抽象类的区别主要在变量和成员方法的区别
在JDK1.7版本中
接口
1.成员变量
只能是常量,默认修饰为:public static final
2.成员方法
都是抽象的,默认修饰 public abstract;没有构造方法
抽象类
1.成员变量
因为抽象类需要被继承,所有成员属性不能为private,即对成员属性可以用protected和public修饰,同时,成员变量即可以为变量,也可以为常量。
2.成员方法
可以有构造方法,方法修饰符不能为private,可以是抽象方法,也可以是非抽象方法 (可以有方法的具体实现)
在JDK1.8版本中
对接口进行一些修改,在接口中可以定义静态方法(只能通过接口调用,不能通过实现类的类名和对象调用),也可以定义默认方法(有具体的实现,JDK1.7中接口不能有具体方法的实现),但是必须用default修饰来修饰该方法
在JDK1.8版本中当一个类同时实现两个接口,但是两个接口中定义了同样的方法,那么在这个类中必须重写这个方法,否则编译不会通过。