为什么Java需要接口而Smalltalk不需要?
我已经在Smalltalk中编程了一段时间,但我从来没有真正需要接口来实现任何东西。那么,为什么像Java这样的语言不能摆脱接口呢?是只有Smalltalk还是有另一种不需要接口的语言?
我已经在Smalltalk中编程了一段时间,但我从来没有真正需要接口来实现任何东西。那么,为什么像Java这样的语言不能摆脱接口呢?是只有Smalltalk还是有另一种不需要接口的语言?
因为Java是静态类型的,而Smalltalk不是。当您不声明类型并且变量不会进行类型检查时,接口没有任何作用。但是在像Java这样的静态类型语言中,它们非常方便,因为它们让你有一个变量,其类型由对象实现的方法而不是其类定义。它使您更接近Smalltalk本身的动态类型,而不会放弃类型检查的好处。
这是一个多态性问题:在Java中,你有静态类型,因此你需要知道你的对象可以回答哪些消息......在Smalltalk(和其他非静态语言)中,你只需要实现正确的方法即可实现多态性。
例如:
这也意味着你可以拥有多态对象,而不必成为同一层次结构的一部分......多重遗传,mixins和其他方法(特征存在于Pharo上)只是重用技术,而不是设计约束。
这种做事方式通常被称为“鸭子打字”......请参见: http://en.wikipedia.org/wiki/Duck_typing