在Java中,Object可以有一个运行时类型(它是创建它的类型)和一个类型(你已经将它转换为的类型).
我想知道这些类型的正确名称是什么.例如
class A {
}
class B extends A {
}
A a = new B();
Run Code Online (Sandbox Code Playgroud)
a被创建为,B但它被声明为A.引用a每个视角的类型的正确方法是什么?
我认为区分对象(在执行时存在,只有其执行时间类型)和具有编译时类型的表达式(如变量)很重要.
所以在这种情况下:
A a = new B();
Run Code Online (Sandbox Code Playgroud)
a是一个类型的变量A.它在执行时的值是对类型对象的引用B.
Java语言规范使用"运行时类"(例如,为了覆盖的目的,如第15.12.4.4节中所述)用于对象的类型.在其他地方我认为它只是使用"type"作为表达式的类型,这意味着编译时类型.
Java语言规范讲述了变量的声明类型,即getClass()关于对象运行时类的javadoc .
请注意,Java中没有运行时类型; List<String>并且List<Integer>是不同的类型,但它们的实例共享相同的运行时类.