接口能描述成has-a吗

接口has a什么呢? 如果说接口当作具备某种能力来用,比如Xyzable(Iterable, Printable, Observable),可以勉强说成has a吧,因为算是具备某种能力,但还不足以概括接口所有的特性,因为接口也可以当作is-a来用,接口所表示的Type用法也是很广的,如List接 口,ArrayList,AbstractList等也都是实现它的,所强调的侧面不同,因此我认为这里将接口描述成has-a特性欠妥。

一般而言,继承关系是is-a,组合关系才是has-a

 

所以这里接口就描述成什么好呢?接口算是继承关系吗?它的界限比较模糊,不太好确切描述~等待概念更新

 

仔细想想,接口应该也算是继承关系,抽象的强制实现并拥有,非抽象的直接强制拥有,其实都是强制拥有,都不能舍弃,顶多是改写,最终拥有的基本都是实现(例外是接口extends接口),只不过implements继承的可能只是骨架,是契约,是规范,extends继承的是现成的遗传(包括接口抽象方法,抽象类抽象方法除外,因为必须实现),但其中当然也是包括了骨架契约与规范的~

 

话说回来,语言设计者真的是很考究的,我们单单研究extends(extend)和implements(implement)这两个单词吧,其实都已经概括在内了,非常地精到~

 

extend:延伸、扩展,对于去extends的类或接口而言,表明了一种可能性,延伸扩展的可能性,当然也可以不延伸扩展,延伸扩展如重写,如添加,如实现,对于不延伸扩展,就如接口extends接口

 

implement:实现 表示必须去实现,全部实现接口规范的方法,已经概括

 

综上所述,我认为接口还是能归为is-a的

你可能感兴趣的:(接口)