为什么Java需要接口而Smalltalk不需要?

use*_*097 14 java smalltalk interface

我已经在Smalltalk中编程了一段时间,但我从来没有真正需要接口来实现任何东西.那为什么Java等语言不能摆脱接口?它只是Smalltalk还是其他语言不需要接口?

Chu*_*uck 24

因为Java是静态类型而Smalltalk不是.当您不声明类型并且您的变量不会被类型化时,接口不会用于任何目的.但是在像Java这样的静态类型语言中,它们非常方便,因为它们允许您拥有一个变量,其类型由对象实现的方法而不是其类来定义.它让你更接近动态类型Smalltalk原生而不放弃类型检查的好处.


Est*_*nLM 9

这是一个多态问题:在Java中你有静态类型,因此你需要知道你的对象可以回答哪些消息...在Smalltalk(和其他非静态语言)中你只需要实现正确的方法来获得多态性.

例如:

  • 在Java中,您需要实现Cloneable,它将方法Cloneable.clone定义为具有cloneble对象.然后,编译器知道你的对象将理解该方法(否则会抛出错误)
  • 在smalltalk中,您只需要实现方法#clone.在调用之前,编译器永远不会知道/不关心哪些消息理解您的对象.

这也意味着你可以拥有多态对象而不属于同一层次结构......多继承,mixins和其他方法(Pharo上存在特征)只是重用技术,而不是设计约束.

这种做事方式通常被称为"鸭子打字"......请参阅:http://en.wikipedia.org/wiki/Duck_typing