关于选择接口还是抽象类的选择: https://www.ibm.com/developerworks/cn/java/l-javainterface-abstract/
接口和抽象类的区别:
1. 继承上:一个类可继承多个接口,一个类
2. 成员变量:接口的成员变量默认是public final static的,而抽象类则和普通类没有区别
3. 成员方法上:属性上,接口的方法都是public abstract的,而抽象类则和普通类没有区别。
4. 接口能继承接口,但不能继承类,抽象类可以实现接口
5. 接口的实现类必须实现全部接口方法,而抽象类,如果不实现全部抽象方法则需要声明为抽象类。