Java,术语澄清

Mik*_*ike 1 java terminology

在Java中,Object可以有一个运行时类型(它是创建它的类型)和一个类型(你已经将它转换为的类型).

我想知道这些类型的正确名称是什么.例如

class A {

}

class B extends A {

}

A a = new B();
Run Code Online (Sandbox Code Playgroud)

a被创建为,B但它被声明为A.引用a每个视角的类型的正确方法是什么?

Jon*_*eet 8

我认为区分对象(在执行时存在,只有其执行时间类型)和具有编译时类型的表达式(如变量)很重要.

所以在这种情况下:

A a = new B();
Run Code Online (Sandbox Code Playgroud)

a是一个类型的变量A.它在执行时的值是对类型对象的引用B.

Java语言规范使用"运行时类"(例如,为了覆盖的目的,如第15.12.4.4节中所述)用于对象的类型.在其他地方我认为它只是使用"type"作为表达式的类型,这意味着编译时类型.


mer*_*ike 5

Java语言规范讲述了变量的声明类型,即getClass()关于对象运行时类的javadoc .

请注意,Java中没有运行时类型; List<String>并且List<Integer>是不同的类型,但它们的实例共享相同的运行时类.