类别:符合条件的对象集。
动态语言不关心对象形成的过程,满足条件即认为是同一类别的对象。
静态语言认为同一类别的对象必须是靠继承得到的类创建的。
静态语言可以靠接口来部分实现上述动态语言的特性,但是一个已经被创建了的对象,即便符合接口定义,但是类因为没有显示声明也无法传入一个以该接口为参数的函数中。因此你要在类那里再加一个实现某接口,于是便有了
class A 继承B 实现接口C{
}
这样的类了。(不过golang的接口则不需要这样的显式声明,我想他们可能意识到了这点)
这里有一个很重要的点就是,你是后发现原来这个对象就属于那个类别的。这个对象可能是后面慢慢形成的。但是当你发现这个事实后再去补上这个类实现了某接口。有点违背当初的设计,因为当初是设计有目的的实现接口的,不是后发现原来符合条件了
我理解类型系统有点像一种记录。只能帮助我们审查历史(类型检查),不能预判未来。
传统的静态类型语言要求每一个对象都对应一个类,每一个对象都由这个类创建。对象间的关系完全由他们从属的类确定。这些类要显式地声明与其他类和接口之间的关系。
类型系统需要程序员在描述程序运行时不断地记录两样东西:
1.数据结构
2.类别之间的关系