我们称 "A" 是 "B" 的子类型。一个结论就是声明有类型 "B" 的任何变量或形式参数在运行时间可以持有类 "A" 的一个值；在这种情况下很多面向对象编程者会声称 "B" 是这个变量的“静态类型”而 "A" 是它的“动态类型”。这个规则的例外包括C++语言中的私有继承（它不建立子类型），和 Eiffel 语言中在派生类型上特定运算，在其中继承自基类的特征可以用违反子类型规则的方式去除或修改。另一个例子是可以允许整数值被用在期望浮点数值的地方，或可以定义包含整数和实数二者的一个类型 number 的