对比 接口 抽象类
    声明 用interface声明接口 用abstract class声明抽象类
    成员变量 在接口中,没有变量,其成员无论怎么去定义,都是公共常量——公有的,最终的,静态的。即使不显示标识,编译器也会为其自动加上。 抽象类的成员变量则是完全依据显式定义的不同而不同,编译器将不会做任何动作。
    方法 所有接口中的方法均隐含为共有的和抽象的,即使不显示修饰,编辑器也会自动添加。接口中不能有非抽象方法,其方法一定不能是静态的,最终的以及非共有的。 编译器不会为抽象类中的方法自动添加任何修饰符,这完全取决于开发人员,可以有抽象方法,也可以没有抽象方法,但只要有一个方法是抽象的,该类就必须为抽象类。若有抽象方法,不能为静态的,最终的以及私有的。
    继承 接口可以继承来自多个不同继承树上的接口,但是其只能继承子接口,不能继承子类。当继承后,不能涉及其父类接口中的方法。接口不能实现别的接口,也就是定义接口时候不能出现关键字implement。 抽象类只能继承一个父类,但可以实现多个来自任何地方的接口。其可以选择性的设计父类或父接口中的抽象方法。
    多态 接口类型的引用可以指向任何实现自该接口或实现自该接口的子接口的类,通过接口引用可以访问其指向的对象,实现自接口的方法。 抽象类的引用可以指向其子类的对象,通过该引用可以访问子类中继承自该抽象类的所有属性和方法。