Java中的Imports与Class Hierarchy

时间:2014-07-30 18:09:48

标签: java

您好,我是Java的初学者。 我刚刚读到了类层次结构 -

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

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

如果Object类是超类,那么为什么我们在Java中单独导入每个类? 仅仅导入java.lang.Object?

是不够的

3 个答案:

答案 0 :(得分:1)

你是对的,因为Java中的每个类都是Object类的后代,但是如果你刚刚导入了Object,那就是你得到的全部内容。您不会获得ArrayList,HashSet等或API中定义的任何其他类。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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

例如,如果您想编写自己的Swing组件,则可以在不使用任何导入的情况下执行此操作:

class MyComponent extends javax.swing.JComponent { ... }

以这种方式使用完全限定的名称很麻烦,因此大多数人更喜欢导入:

import javax.swing.JComponent;

class MyComponent extends JComponent { ... }

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