You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

父类能否作为子类的类型?及Kotlin中n1变量的类型困惑

Kotlin类型相关问题解答

1. 父类能否作为其子类的一种类型?

不行。面向对象继承体系遵循里氏替换原则:子类可以被当作父类的一种类型使用(比如Double可以赋值给Number类型变量),但反过来不成立——父类的实例可能是任意子类的对象,无法保证具备某个特定子类的特性,所以不能直接把父类当作子类的类型。

2. 变量n1的精确类型是什么?

变量n1存在两个层面的类型:

  • 编译时静态类型:Number(声明时指定的类型)
  • 运行时实际类型:Double(赋值的758.3是Double实例,所以变量实际指向的对象是Double类型)

3. 为什么第3行var n2: Double = n1会编译错误?

编译器只识别变量的静态类型。n1的静态类型是Number,它可能是Double、Int、Float等任意Number子类的实例,编译器无法确定它一定是Double,所以直接赋值给Double类型变量会触发编译错误。必须显式做类型转换(比如n1 as Double)才能通过编译。

4. 为什么移除第3行后会打印Double?

is关键字是运行时类型检查,它判断的是变量实际指向的对象的类型,而非声明的静态类型。n1实际指向的是Double实例,所以n1 is Double会返回true,代码会执行第一个分支打印"Double"。虽然n1 is Number也成立,但条件判断是从上到下匹配的,第一个满足的分支会被执行,所以不会走到打印"Number"的分支。

内容的提问来源于stack exchange,提问作者Mohammad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 07:17:03