为什么在 Java 的实例化过程中会两次命名该类?

2022-09-03 16:45:41

实例化对象时,为什么要指定类两次?

OddEven number = new OddEven();

你为什么不能直接说?当我声明一个字符串时,我只说一次:number = new OddEven();String

String str = "abc";

实际上,我的问题不是“你为什么这样做” - 显然,你这样做是因为你必须这样做 - 而是,为什么创造者选择让Java语法像这样工作?

我的想法是:

  1. Java在低级别运行方式有一些基本的东西,需要键入两次名称,或者
  2. 创建者自由选择这样做,以保持语法统一的某些方面 - 首先声明类型?还是更像它的前辈?

答案 1

因为你可以这样做:

Superclass x = new Subclass();

引用的类型可以是要声明的实际对象的超类,因此您需要同时指定两者。例如,您可以执行以下操作:

List<String> stringList = new ArrayList<String>();

你的程序与实现 List 的对象交互,而你不关心实现。


答案 2

看似冗余的类型名称的原因是您正在执行两个单独的操作,每个操作都要求您指定一个类型。

在左侧,您正在声明具有特定类型的变量(存储位置)。在右侧,您正在创建具有特定类型的新对象。中间的“=”会导致对所创建的新对象的引用放置在您创建的存储位置。

每边的类型不必相同。例如,这是法律代码:

Object number = new OddEven();

关键字 String 在第二个示例中仅显示一次的原因是,由于“xxx”是 String 常量,因此类型 String 隐含在右侧。它只是以下简写:

String string = new String("xxx");