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