为什么动态语言中不需要接口?
是不是因为Python是动态类型的,所以我们不需要像Java和C#那样的接口概念呢?
9 个回答
2
值得注意的是,很多人一开始会说,接口只是用来记录“一个类支持哪些方法”。但其实,接口的用处远不止于此。Grzenio提到的“实现相同的行为”就是一个很好的例子。比如,看看Java中的Serializable接口。它并不实现任何方法,而是用作一个“标记”,表示这个类可以安全地进行序列化。
从这个角度来看,使用接口的动态语言也是有道理的。不过,类似于注解的方式可能会更合理一些。
5
我们并不需要它们,但我们支持它们。可以看看Zope 接口(这些接口可以在 Zope 之外使用,也确实被用在其他地方)。
23
interface
这个词最早是由Java引入的(C#也是从这里学来的),用来描述一个对象需要遵循的规则。
其实,接口一直是面向对象编程的重要部分,它基本上代表了一个对象需要实现的方法。Java通过这种机制来确保类型的正确性。
所以,动态的面向对象编程语言也使用接口,尽管它们不进行静态检查。就像其他数据类型一样,比如在Ruby中:
@i = 1;
你不需要声明i
是FixNum
类型的,你只要直接使用它。接口也是一样,它们是自然而然流动的。这样做的缺点是,你无法进行静态检查,错误只会在运行时显示出来。
另一方面,像Go或Scala这样的语言使用的结构类型(我称之为静态鸭子类型 :P)则兼具了两者的优点。
1. 请参见Daniel Earwicker关于CORBA interface
关键字的评论