`

三:Java接口

阅读更多
一:什么是接口
一个接口只有方法的特征或一些常量,而没有方法的实现,因此这些方法在不同的地方被实现时,可以具有完全不同的行为。一个类可以实现多个接口但不能继承多个类,所以利用接口还可以实现类似多重继承的功能。实现一个共同的接口的两个类常常完全不同,但是有一组相同的方法和常数,一些看上去不相干的类,可以因为相类似的服务而具有相同的接口.

二:接口是对可插入性的保证
一个对象需要知道其他的一些对象,并且与其他对象发生相互作用以完成一项工作。现在要在系统中加入一个新的类C,问题是已有某些类可以帮新类完成一部分的功能.这时候怎么办?你全新写这个类吗?还是通过继承来得到一些已实现的功能?答案很简单我们都会选择后者。但问题是有两个功能是分别写在两个类(A,B)里面呢?这时候我们要怎么办? Java不支持多重继承,有一个可以解决的办法是让A继承B,我们再用C继承A,这样是可以得到两个我们想要的功能(更好一点的办法就是把A和B的功能放到一个抽象类AB里面,我们的C可以继承AB),但如果我们要100个类里的一个方法呢?这时候难道我们也用此方法去得到我们想要的功能吗?如果这样整个系统的结构将发生革命性的改变!这完全不符合"开-闭"原则。这时接口就显示出其妙处来。在一个类的等级结构中的任何一类都可以实现一个接口,这个接口会影响到此类的所有子类,但不会影响到此类的任何超类,此类不得不实现这个接口所规定的方法,而其子类则可以从此类自动继承得到这些方法,当然也可以置换掉这些方法,这时候我们也就说这些子类具有可插性。
(1)关联可插性
一个对象需要完成一项任务,所以要知道其他对象,并且调用其他对象的方法,这个对象对其他对象的知识叫做关联。如果一个关联不是针对一个具体的类,而是针对一个接口,那么任何实现这个接口的类就都可以满足要求,换言之,当前对象并不在意所关联的是哪一个具体的类,而仅仅关心这个类是否实现了某一个接口,这样就可以动态地将这个关的类转换到另一个个体类(!!如何理解)
(2)调用的可插入性
同样一个对象不可避免需要调用其他对象的方法,这种调用不一定非得是某一个个体的类,而可以是一个接口,这样一来,任何实现了这个接口的个体类都可以被当前对象调用,而当前对象到底调用的是哪一个个体类的实现则可以动态决定.
(3)类型
A:最好用接口来进行变量类型的声明,参量类型的声明,方法的返回值类型声明,以及数据类型的转换等,其次是考虑用抽象类和做到这些。
B:如果一个类已经有一个主要的超类型,那么通过实现一个接口,这个类可以拥有另一个次要的超类型,这种次的的超类型就叫做混合类型。如java.util.TreeMap继承了AbstractMap,它的主要类型是AbstractMap,同时它双实现了Cloneable和Serializable,这两个次要类型分别说明TreeMap是可以克隆和串行化的
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics