日期:2014-05-20  浏览次数:20577 次

再论接口与抽象类
详解接口和抽象类
相似性:
1:两者都可以看作是抽象类,因此不能被直接实例化,可以声明接口或抽象类变量。
解释:不能直接用new关键字生成接口或者抽象类的实例,实例化在子类中实现。
2:两者都可以看作是需要被继承(实现)的,实例化发生在子类对象实例的生成。
解释:接口和抽象类都是别人的嫁衣,定义了相应的规范,是一种行为约束。
3:两者的非私有成员变量都可以在子类中被引用。
解释:实现接口或继承抽象类都可以获得接口或抽象类的成员变量,也就是属性。
4:两者的抽象成员方法都是只有方法定义体而不能有方法实现。
解释:语言本身的原则,不需要太多的为什么,正是需要被实现或者继承的原因所在。
5:两者的所有抽象成员方法必须在实现或者继承它们的子类中全部实现。
解释:语言本身的原则,若非如此,这些方法岂不是没有用武之地,删除得了。
6:两者的所有抽象成员方法在实现或者继承它们的子类中实现时,要具有相同的方法名、返回值类型、参数个数、参数类型和参数顺序。
解释:这才体现了作为实现或者继承方的诚意,要遵循抽象出来的规范。
不同点:
1:接口是用来实现的;抽象类是用来继承的。
解释:表达上更贴切实质一些,对两者进行一下区分,也可以理解为不尽相同的继承。
2:接口实现关键字implements;抽象类的继承关键字extends。
解释:这个还需要解释吗?这个语言本身定义的规范,服从----有时候是一种聪明的选择。
3:一个类可以实现多个接口,一个类最多可以继承一个抽象类。
解释:完全面向对象语言本身就不支持多重继承,接口是一个很好的解决方案。
4:接口的所有成员方法都必须是抽象方法;抽象类的成员方法可以有抽象方法。
解释:没什么好说的,接口内的方法必须都是抽象方法,抽象类可能有抽象方法。
5:接口中所有成员不能被定义成private;抽象类中抽象方法不能被定义成private。
解释:不同点4可以解释为什么会是这样。



以上是个人联系理论并加以测试实践总结的,疏漏之处在所难免,将不断完善,也请各路高手不吝赐教,提出宝贵意见。


------解决方案--------------------
接分