为什么我必须导入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。*覆盖它了吗?
如果没有,为什么这是看似惯例?
答
以星号结尾的导入语句仅导入该包中的所有类而不是任何子包。所以,如果你有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;
*“我是真正需要'进口java.awt.event中*'如果我已经。用'java.awt。*'?“覆盖它* - 是的,你需要这样做。导入只会导入指定包('javax.swing。*')中的指定类('javax.swing.event.HyperlinkListener')或类,它不会导入子包 – MadProgrammer