Inheritance Kotlin中的type::class和type有什么不同
给定以下代码:Inheritance Kotlin中的type::class和type有什么不同,inheritance,kotlin,Inheritance,Kotlin,给定以下代码: val a: A = A() val b: B = a println("${a::class} and ${b::class}") 我期望A类和B类的输出,但实际输出是A类和A类 因此,type和之间有什么不同::class?您的变量b属于b类型,但它指向A的一个实例 当您访问::class时,这会检查运行时引用,在这两种情况下,它的类型都是A。Kotlin与Java一样,是静态类型的。您必须区分编译时类型和运行时类型 a的编译时类型是a,而b的编译时类型是b。编译器根据声明
val a: A = A()
val b: B = a
println("${a::class} and ${b::class}")
我期望A类和B类
的输出,但实际输出是A类和A类
因此,
type
和之间有什么不同::class
?您的变量b
属于b
类型,但它指向A
的一个实例
当您访问
::class
时,这会检查运行时引用,在这两种情况下,它的类型都是A
。Kotlin与Java一样,是静态类型的。您必须区分编译时类型和运行时类型
a
的编译时类型是a
,而b
的编译时类型是b
。编译器根据声明类型推断
但两者的运行时类型都是A
a::class
,称为class literal syntax,将为您提供对Kotlin类的运行时引用
请注意,如果让编译器推断
b
的类型而不是明确指定它,那么b
的编译时类型也将是A
val b = a // compiler infers -> val b: A = a