エンジニアのひよこ_level10

【毎日更新!】新卒4年目エンジニアブログです!

【Java】packageとimportの役割。PHPと比較【847日目】

packageとimport

package item;

import htmlitem.Td;

public class Table
{
    Td td = new Td();
}

こんな感じに、packageとimportがある。なにするか。

importは使用するクラスの指定

PHPだと、 useの機能に近いもの。

import java.util.Map;
import java.util.LinkedHashMap;
...
Map<String, Object> map = new LinkedHashMap();

これは以下のようにも書けます。

java.util.Map<String, Object> map = new java.util.LinkedHashMap();

importは、このファイルの処理が参照するクラスを指定するものであり、
下のようにフルのパスで書くならいりません。

クラス指定なので、これをいっぱい書いたからめっちゃメモリに読み込むとかはしません。
(IDEとかがやる静的解析においては話が変わるかもしれませんが・・・)

packageは、グルーピングや名前空間指定

PHPだと、 namespaceの機能に近いもの。
■ただ、機能がもう少しある。

package item;

public class Table
{
    Td td = new Td(); // importを指定していないから、item.Tdを参照する
}

この場合、Tableクラスのフルパスは item.Tableです。
同一package内のクラスは、importを書かなくても大丈夫。

ここまでだと、名前空間を指定するだけの存在になりますが、ファイルのグルーピングの役割もあります。

『同一パッケージ内』というものに影響するものとして、わかりやすいものはアクセス修飾子。
protectedの条件は、

  1. 同一クラス
  2. 同一パッケージ
  3. サブクラス(子クラス)

という条件なので、packageが同一であれば、protectedはアクセス出来ます。
ここらへん、PHPだとclassはpublicしかないようなものなので、namespaceにおいては結構違うところかもしれませんφ(・