为什么动态语言中不需要接口?

18 投票
9 回答
3615 浏览
提问于 2025-04-16 00:06

是不是因为Python是动态类型的,所以我们不需要像Java和C#那样的接口概念呢?

9 个回答

2

值得注意的是,很多人一开始会说,接口只是用来记录“一个类支持哪些方法”。但其实,接口的用处远不止于此。Grzenio提到的“实现相同的行为”就是一个很好的例子。比如,看看Java中的Serializable接口。它并不实现任何方法,而是用作一个“标记”,表示这个类可以安全地进行序列化。

从这个角度来看,使用接口的动态语言也是有道理的。不过,类似于注解的方式可能会更合理一些。

5

我们并不需要它们,但我们支持它们。可以看看Zope 接口(这些接口可以在 Zope 之外使用,也确实被用在其他地方)。

23

interface这个词最早是由Java引入的(C#也是从这里学来的),用来描述一个对象需要遵循的规则。

其实,接口一直是面向对象编程的重要部分,它基本上代表了一个对象需要实现的方法。Java通过这种机制来确保类型的正确性。

所以,动态的面向对象编程语言使用接口,尽管它们不进行静态检查。就像其他数据类型一样,比如在Ruby中:

 @i = 1;

你不需要声明iFixNum类型的,你只要直接使用它。接口也是一样,它们是自然而然流动的。这样做的缺点是,你无法进行静态检查,错误只会在运行时显示出来。

另一方面,像Go或Scala这样的语言使用的结构类型(我称之为静态鸭子类型 :P)则兼具了两者的优点。

1. 请参见Daniel Earwicker关于CORBA interface关键字的评论

撰写回答