Java中的导入与类层次结构

Java中的导入与类层次结构,java,Java,嗨,我是Java的初学者。 我刚刚读到了关于类层次结构的内容- java.lang.Object java.awt.Component java.awt.Container javax.swing.JComponent 此外,类对象是类层次结构的根。每个类都有对象作为超类 如果对象类是超类,那么为什么我们在Java中单独导入每个类呢? 仅仅导入java.lang.Object还不够吗?您是对的,java中的每个类都是Object类的后代,但如果您只导入Object,您就只能得到这些。您不会得到A

嗨,我是Java的初学者。 我刚刚读到了关于类层次结构的内容-

java.lang.Object
java.awt.Component
java.awt.Container
javax.swing.JComponent

此外,类对象是类层次结构的根。每个类都有对象作为超类

如果对象类是超类,那么为什么我们在Java中单独导入每个类呢?
仅仅导入java.lang.Object还不够吗?

您是对的,java中的每个类都是Object类的后代,但如果您只导入Object,您就只能得到这些。您不会得到ArrayList、HashSet等,也不会得到API中定义的任何其他类。

多级单根层次结构的主要原因是-->在执行垃圾收集时,所有内容都被视为对象,因此它们以通用方式处理。在某些集合上插入/删除或在线程上同步时,同样适用。
对象只有一些基本方法和字段,如
wait()
notify()
hashCode()
。其他类虽然隐式扩展了对象,但提供了自己的方法和属性集。因此,您必须导入它们。

在Java中,
import
声明只会影响名称的解析方式。它们不影响您可以使用的类,也不受继承的影响

大多数人发现使用类库中的简单名称很方便。为此,您需要添加
import
声明。例外是
java.lang
包中的名称,它隐式导入到每个java程序中

例如,如果您想编写自己的Swing组件,则可以不使用任何导入来编写:

class MyComponent extends javax.swing.JComponent { ... }
以这种方式使用完全限定名称很麻烦,因此大多数人更喜欢导入:

import javax.swing.JComponent;

class MyComponent extends JComponent { ... }

确实,
JComponent
java.awt.Container
java.awt.Component
的子类。为了使用Swing的
JComponent
,不需要从
java.awt
导入任何内容。如果这样做,则始终可以使用完全限定的包名。但是如上所述,大多数人发现从这些包中导入名称很方便,这样他们就可以编写
Container
,而不是
java.awt.Container

不,因为这只允许您使用object,不是扩展ObjectObject的东西,你不必单独导入每个类——java.lang包中的所有东西都可以不导入。尽管这是一个非常基本的问题,但我认为它不值得-2。在我看来,OP正在批判性地思考他们正在学习什么,并试图理解这个概念背后的逻辑。我明白为什么OP会有这个问题。话虽如此,但我确实认为向教授提问是一个完美的问题。@PaulRichter我同意。这是一个基本问题,但它也足够具体,适合StackOverflow,而不是像一些投票结束时建议的那样“太宽泛”。