接口
由interface修饰,内部成员,方法都是public
接口可以实现多个
接口中可能会没有方法只是一个声明,类似Serializable
1.8之前
接口中的方法都是需要类实现的
内部变量,方法都是public static final的
1.8之后
default修饰
接口中可以有对象级别的实现方法,
那么多个接口相同方法执行哪个?子类必须实现这个方法
那么子类继承的类和接口中默认方法相同执行哪个?类优先接口
只能public修饰或者不写
static修饰
接口中可以有类级别的实现方法,只能public修饰或者不写
增加一个类定义,所谓的functional interface只有一个抽象方法的接口,建议使用@FunctionalInterface Annotion来标记
使用
对行为的抽象,抽象方法的合计,利用接口可以达到API定义和实现分离的目的
抽象类
使用abstract修饰,类的内部可以有需要子类实现的abstract方法,也可以没有
抽象类只能继承一个
1,抽象方法必须是protected 或者public的
2,抽象类不能用于创建对象
3,子类继承抽象类必须实现抽象方法,如果不实现抽象方法那么子类也要定义成抽象类
使用
可用于基类定义
抽象类、接口的区别
1,抽象可控制子类实现更多细节,只把局部变化给子类。1.8之后的接口能实现默认方法,不过不能控制子类实现更多细节,只能实现公共的默认方法。比如模板方法模式就需要抽象类实现
2,接口可以实现多个,抽象类只能实现一个(要实现多个需要使用内部类的方式)