大多数人认为,接口的意义在于顶替多重继续。众所周知Java没有c++那样多重继续的机制,但是却能够实作多个接口。其实这样做是很牵强的,接口和继续是完全不同的东西,接口没有能力代替多重继续,也没有这个义务。接口的作用,一言以蔽之,就是标志类的类别(type of class)。把不同类型的类归于不同的接口,可以更好的治理他们。OO的精髓,我以为,是对对象的抽象,最能体现这一点的就是接口。为什么我们讨论设计模式都只针对具备了抽象能力的语言(比如c++、java、c#等),就是因为设计模式所研究的,实际上就是如何合理的去抽象。(cowboy的名言是“抽象就是抽去像的部分”,看似调侃,实乃至理)。
继续的概念不用多说,很好理解。为什么要继续呢?因为你想重用代码?这绝对不是理由,继续的意义也在于抽象,而不是代码重用。假如对象A有一个run()方法,对象B也想有这个方法,所以有人就Class B extends A。这是不经大脑的做法。假如在B中实例化一个A,调用A的Run()方法,是不是可以达到同样的目的?如下: