@634

パッケージ(package) - packageキーワード

Advertisement

クラスをパッケージに割り当てる

説明のために2つのTableクラスを定義する

クラスTable(机)
class Table{
    private String material = "Wood";
    private int capacity = 4;
}

クラスTable(表)
class Table{
    private int row = 4;
    private int column = 3;
}
この時点では明示的にパッケージを指定していないので、各クラスはデフォルトパッケージに属することになる。そして、デフォルトパッケージ内に同名のクラスが複数存在することになるため、コンパイル時にエラーとなる。

上記2つのクラスを同じファイル内に記述して定義。
C:\>javac Table.java
Table.java:6: クラス Table が重複しています。
class Table{
^
エラー 1 個

package

パッケージ指定はpackageキーワードを使用して、クラスファイルの先頭に記述する。パッケージは階層型になっていて、ピリオド(.)で区切って指定する。ファイルとフォルダの関係のようなイメージである。
また、上記の定義だけでは、異なるパッケージ同士の階層指定が同じになってしまう可能性がある。パッケージを使用してクラス名の衝突を回避しても、パッケージ名を一意にしなければパッケージの衝突が起きてしまい、意味がなくなってしまう。そこで、Java言語指定では、以下の項目を推奨している。
  • インターネットのドメイン名を使用する。
  • ドメイン名を逆から使用する。
例えばこのサイトの場合、634.ayumu-baby.com がドメインなので、パッケージ指定は
com.ayumu-baby.634
となり、その下に階層を作成してクラスを分類することになる。
com.ayumu-baby.634.database
com.ayumu-baby.634.web

もちろん、パッケージにドメイン名を使用しなくてもプログラムは作成できる。
myproject.database
myproject.common.util

机を表すTableクラスに対してパッケージを指定する。
package com.ayumu-baby.634.furniture

class Table{
    private String material = "Wood";
    private int capacity = 4;
}

表を表すTableクラスに対してもパッケージを指定する。
package com.ayumu-baby.634.format

class Table{
    private int row = 4;
    private int column = 3;
}
これで各パッケージは
com.ayumu-baby.634.furniture.Table
com.ayumu-baby.634.format.Table
となり、クラスの衝突は発生しない。このパッケージ名からの表記を完全限定名という。

Advertisement

ショートカット

634
このカテゴリのトップページに戻る
634labs
   UIコレクションギャラリー

サイト検索

Google

Web サイト内

Y!ログール