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