まず、正式なクラス名と非正式なクラス名のおさらい。
正式なクラス名:packageName.ClassName
非正式なクラス名:ClassName
同一package内であれば、クラス名が正式なものでなくても、アクセスは可能である。
しかし、別packageからpublicクラスにアクセスする際は、クラス名は正式なものでなければならない。
別packageのpublicクラスにアクセスするには、importディレクティブを使う。
例:
import packageName.ClassName;
いったんimportが済めば、その後は非正式なクラス名でも利用することができる。例えば、組み込みクラスのflash.media.Soundを利用する場合、
import flash.media.Sound
new Sound
といった具合。
クラスをpackageの階層でimportしておけば、そのpackage内のどこでもそのクラスを利用できる(クラス内でimportすれば、そのクラスの中でのみ利用できる)。
例:
package jp.livedoor {
import flash.media.Sound
public class Blog {
public function Blog () {
new Sound
}
}
}
importの結果、同一package内に同一の名前をもつクラスが重複してしまった場合、正式なクラス名を使う必要が生じる。
例:
new flash.media.Sound
new jp.livedoor.Sound
クラス名が重複している際に非正式なクラス名を用いると、コンパイルエラーが発生する。
他のpackageの全てのpublicクラスにアクセスするには、
import packageName.*
と書く。
名前の無いpackage内に書いたクラスは、「無名パッケージ(unnamed package)」という自動的に生成されるpackage内に配置される。無名パッケージ内のクラスは、importなしで利用できる。
例:
package {
// ここで定義されたクラスは無名パッケージに配置され、プログラムのどこからでも直接利用できる
}
しかし、ベストプラクティスとしては、無名パッケージ内にクラスを定義することは避けるべきとされる。なぜなら、無名パッケージ内のクラス名が他のクラスと重複する恐れがあるからである。
今日の進捗(第4回+第5回):178→193/4343