デフォルト(修飾子ナシ) アクセス修飾子 - 萌えJava超入門
第十五章 アクセス修飾子

デフォルト(修飾子ナシ)

アクセス修飾子をデフォルトにしたときの動作を
サンプルコードで確認しましょう。

目次

1.アクセス修飾子 デフォルト


デフォルトでは、同一パッケージ内のクラスからのみアクセスを許可します。

デフォルト
 修飾子名 アクセス範囲適用対象
 デフォルト
 (修飾子ナシ)
 同一パッケージ内のクラスからアクセス可能 クラス メンバ



2.サンプルコード


同一パッケージ内のクラスからアクセスしてみましょう。

配置
   ws
    └---pk01
          |---MainDft.java  ← mainメソッド
          └---KlassDft.java  ← say()


//MainDft.java
package pk01;
class MainDft{
    public static void main(String[] args){
        System.out.println("main method.");
        KlassDft.say();
    }
}

//KlassDft.java
package pk01;
class KlassDft{
    static void say(){ //デフォルト
        System.out.println("pk01.KlassDft");
    }
}

コマンドライン
ws>javac pk01/MainDft.java
ws>java pk01.MainDft
main method.
pk01.KlassDft

うまくいきましたね。
今までのと同じだからね。



それじゃあ
ダメなやつ行ってみよう。


3.NG例 パッケージの外から参照


KlassDftクラスを、別のパッケージに移動しました。
MainDftクラスから、パッケージ外のKlassDftクラスにアクセスしてみましょう。

配置
   ws
    |---pk01
    |     └---MainDft.java  ← mainメソッド
    |
    └---pk02
          └---KlassDft.java  ← say()

//MainDft.java
package pk01;
class MainDft{
    public static void main(String[] args){
        System.out.println("main method.");
        KlassDft.say();
    }
}

KlassDft.java NG
//KlassDft.java
package pk02;
class KlassDft{
    static void say(){
        System.out.println("pk02.KlassDft");
    }
}

コマンドライン
ws>javac pk01/MainDft.java
pk01\MainDft.java:6: エラー: シンボルを見つけられません
        KlassDft.say();
        ^
  シンボル:   変数 KlassDft
  場所: クラス MainDft
エラー1個

KlassDft.java が見つからなかった。
同一パッケージ(pk01)しか
探していないんだ。
「デフォルトは同一パッケージ内」
覚えておいてくれ。
デフォルトは
同一パッケージ内!!


お疲れ様でした。


© 2019 awasekagami