AWTを題材にして、パッケージの概念について考える

AWTを題材にして、パッケージの概念について考えてみたいと思います。
何気なく、Javaの入門書に付属しているAWTの項目のソースコードを見ていると、

import java.awt.*;    //AWTの主要パッケージの取り込み

のような記述が目立ちます。今回はこの意味について考えてみたいと思います。
まずは、AWTプログラミングの原型を提示します。

///////////////////////////////////////////////////////////////////////////////////////////////////////////////

import java.awt.*; //AWTの主要なパッケージを読み込む

public class FrameTest
{
public static void main(String[] args) //main()メソッドからプログラムは開始される。
{
Frame f = new Frame("Hello"); //フレームを作成
f.setVisible(true); //フレームを可視化
}
}

///////////////////////////////////////////////////////////////////////////////////////////////////////////////

このソースコードは、
import java.awt.*;

import java.awt.Frame;
のように書き換えても正常に動作します。


///////////////////////////////////////////////////////////////////////////////////////////////////////////////


import java.awt.Frame; //AWTの主要なパッケージを読み込む

public class FrameTest
{
public static void main(String[] args) //main()メソッドからプログラムは開始される。
{
Frame f = new Frame("Hello"); //フレームを作成
f.setVisible(true); //フレームを可視化
}
}

///////////////////////////////////////////////////////////////////////////////////////////////////////////////


この説明には以下の図が助けになります。



import java.awt.*;    //AWTの主要パッケージの取り込み
というのは実は、java.awtパッケージに含まれているクラスの階層を丸ごと取り込んでいたいただけにすぎないのです。このことが理解できれば、

import java.awt.Frame;
のように、Frameクラスだけに狙いを定めてインポートすることが可能になります。



さらに興味深いこととして、プログラムの冒頭でインポートしなくても、Frameクラスのインスタントを生成するときだけ、Frameクラスを読み込むことが可能です。

///////////////////////////////////////////////////////////////////////////////////////////////////////////////


public class FrameTest
{
public static void main(String[] args)
{
java.awt.Frame f = new java.awt.Frame("Hello");   //Frameクラスを読み込んでフレームを生成
f.setVisible(true);
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////


ひとたびFrameクラスのインスタンスを生成してしまえば、その後は再度Frameクラスを読み込む必要はありません。下の例では、f.setSize()やf.setVisible()が、Frameクラスを呼び出さずにFrameクラスに定義されているメソッドを使用している例です。

///////////////////////////////////////////////////////////////////////////////////////////////////////////////

public class FrameTest
{
public static void main(String[] args)
{
java.awt.Frame f = new java.awt.Frame("Hello");
f.setSize(600,300);
f.setVisible(true);
}
}



///////////////////////////////////////////////////////////////////////////////////////////////////////////////

ちなみに、このプログラムの実行結果は以下のようになります。
$ javac FrameTest.java
$ java FrameTest



【参考文献】
アスキー書籍編集部『Java6 プログラミング講座』2007 ASCII 181 pp