6

在 Java 中,导入与(外部)类相关,因为每个(外部)类都应该编码在单独的文件中。因此,可以声称import ...;类定义之前的指令与类相关联(有点像注释)。

现在,如果可以继承父类的导入,那将大大减少源文件的混乱。为什么这不可能?即为什么Java 编译器不考虑基类的导入?

笔记:

  • 答案可能不止一个。
  • 我知道如果您让 eclipse 组织您的导入,这不是什么大问题,无需提及。这是关于“为什么”,而不是“如何”(a-la- this)。
4

3 回答 3

10

首先,重要的是要注意不是每个类都必须编码在一个单独的文件中——而是每个公共的顶级类都必须是。不,导入并没有真正与任何类相关联——它们只是用于在文件中包含某些外部类/包的语句,以便可以使用它们。事实上,你永远不需要真正导入任何东西,你总是可以使用全名,即:

java.util.List<String> list = new java.util.ArrayList<String>();

导入是为了方便(并且仅用于编译器 - 在编译类后它们会丢失),以使您不必写出所有内容,而只是让您编写List<String> list = new ArrayList<String>(在您从 进行相关导入之后java.util)。因此,没有理由让子类“继承”导入。

于 2012-12-28T19:52:24.873 回答
2

导入是语法糖,仅此而已。如果您真的愿意,您可以编写任何 Java 程序而无需使用 import 语句。例如,以下类自行编译:

class Foo {
  java.util.List<String> list = new java.util.ArrayList<String>();
}

此外,继承导入使得从类中删除导入变得更加困难例如,如果Bar.java继承自Foo.java,您可能无法删除导入 fromFoo而不将其添加到Bar. 强制导入显式使得更改单个文件变得更加容易,而不必担心对其他文件的影响,这几乎是 Java 和面向对象编程的基本原则。

(最后一点与Go 设计中的一个重要因素有关,它专门试图避免 C 和 C++ 在该领域的问题。)

于 2012-12-28T21:17:58.653 回答
1

让每个文件明确指定其导入可以提高可读性。想象一下打开一个文件,但无法一目了然地看到依赖项,因为导入是从另一个文件继承的。

于 2012-12-28T21:24:15.237 回答