为什么我必须导入java.awt。*和java.awt.event。*(例如)

为什么我必须导入java.awt。*和java.awt.event。*(例如)

问题描述:

在我现在正在开发的练习程序中,它需要一些导入,如下所示:为什么我必须导入java.awt。*和java.awt.event。*(例如)

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 
import javax.swing.event.HyperlinkEvent; 
import javax.swing.event.HyperlinkListener; 
import java.net.URL; 

ELI5:我的问题(我稍微超过了新手入门教程,现在进入中级阶段)正如标题所示。我真的需要导入java.awt.event。*,如果我已经用java.awt。*覆盖它了吗?

如果没有,为什么这是看似惯例?

+1

*“我是真正需要'进口java.awt.event中*'如果我已经。用'java.awt。*'?“覆盖它* - 是的,你需要这样做。导入只会导入指定包('javax.swing。*')中的指定类('javax.swing.event.HyperlinkListener')或类,它不会导入子包 – MadProgrammer

以星号结尾的导入语句仅导入该包中的所有而不是任何子包。所以,如果你有A级居住在com。示例,和B类居住在com.example.subtype,import语句像

import com.example.*; 

将进口A类而不是类B.为了导入B您类倒是有加

import com.example.subtype.*; 

这是为了确保,如果你需要从若干等级‘更高’包(层次来讲),你不从每一个分装进口的所有类它,你可能下不需要或不需要,其中一些可能具有相同的名称导致类名冲突。

即,如果存在com.example.subtype.Type类和com.example.order.Type类,则不希望类似import com.example.*;的导入语句导入这两个类型。

这也是为什么通常更好地从包中明确导入某些类而不是所有类(如同使用星号那样),除非您需要该包中的许多类,否则导入的负载将仅用于迷惑。

你不必使用。*

例如,你只需要使用一个JFrame中,你可以导入

import javax.swing.*; 

但为什么进口包装的所有功能(没有子包)如果你只需要一个?

更好地运用这个(在本例):

import javax.swing.JFrame; 

参见这里:Import package.* vs import package.SpecificType