我正在学习 Kotlin 中的子类型和超类型,最初假设这些术语意味着继承和父类。但是在阅读了 JetBrains 的这篇文章后,我不确定我是否完全理解子类型的含义。
该帖子解释说,它Any是Any?(有道理的)Number的子类型,是 的子类型Any,并且Int是 的子类型Number。到目前为止一切顺利(Any?-> Any-> Number-> Int)和(Any?-> Number?-> Int?)。
但请注意图#5:
此图(以及随附的文本)暗示并解释了Number是其可为空对应物 的子类型Number?,并且它Int也是其可为空对应物 的子类型Int?。这听起来很直观的,直到你记住,Int也是一个亚型Number,和Number子类型Any!这与 Kotlin 文档直接矛盾,后者指定
Kotlin 支持单父类继承——所以每个类(除了根类 Any)都有一个父类,称为超类。
我假设子类型本身不是子类(一个类可以同时是多个父类的子类型?)。如果是这样,有人可以为我澄清 Kotlin 中“子类型”和“超类型”的确切含义吗?
类型与类不同。类型用于限制变量、属性和函数参数的值或函数返回值。类型可能匹配一个类,但它也可能匹配一个接口。
一个类只能有一个直接超类,但一个类型可以有多个直接超类,可能是
AnyAny, 即使类型是接口类型(接口没有超类)和子类型将是
Nothing其被视为一切的子类型的对象。在您的示例中,Number不是Int. 它是一个接口,所以它只是一个超类型。的直接超类Int是Any。
| 归档时间: |
|
| 查看次数: |
350 次 |
| 最近记录: |