アクセス修飾子

アクセス修飾子とはメンバーに対して
どれだけ遠くに存在するクラスからメンバーにアクセスできるかどうかということを
決めるために用いる修飾子です。

アクセス修飾子の種類

アクセス修飾子
アクセスできる範囲
public
アクセスの制限なし。パッケージが違うクラスからでもアクセス可能
protected
自身のクラスのサブクラス及び自身のクラスが所属するパッケージ内クラス からのアクセスが可能
省略
自身が所属しているパッケージ内のクラスからアクセス可能
private
自身のクラス内でのみアクセス可能で、外部のクラスからは完全にアクセス不可

アクセスできる範囲

public
protected
省略
private

上の表でもわかるとおりpublicほどアクセス範囲が広くprivateになるほど狭くなります。

では、まずはアクセス修飾子public と private を使った簡単なプログラムを見ていきます。

サンプルプログラム(Sample47.java)

class Sample47{
    public static void main(String args[]){

    Sub47 obj = new Sub47();
    obj.method();

    }

}

class Super47{
     public int x = 10;
      
}

class Sub47 extends Super47{
      public int y = 20;
   
      void method(){
          System.out.println(" public int x = " + x);
          System.out.println(" public int y = " + y);
  }
}
    

プログラムをコピーする場合すべて選択をクリックしてください。

サンプルプログラム(Sample47_1.java)

class Sample47_1{
    public static void main(String args[]){


    Sub47_1 obj = new Sub47_1();
    obj.method();

    }

}

class Super47_1{
     private int x = 10;
      
}

class Sub47_1 extends Super47_1{
      private int y = 20;
   
      void method(){
          System.out.println(" private int x = " + x);
          System.out.println(" private int y = " + y);
} }

プログラムをコピーする場合すべて選択をクリックしてください。

Sponsored link

2つのプログラムをコンパイル・実行してみます

Sample47 と Sample47_1 の実行結果はこのようになります。
ここでは、お互いスーパークラスには メンバーとして変数 x だけしか定義していません。

Sample47 では pubic アクセス修飾子を Sample47_1 には privateアクセス修飾子
しかし上の表からもわかるようにpublic は アクセスの制限がないので問題なく実行されます。

しかし、privateのほうは自身のクラスだけしかアクセスできません。

すなわち private int x は Super47_1の中でしかアクセスできないことになります。
したがって、 x は Super47_1 で private アクセスされます。のでエラーが出ます。

しかし、privateで制限されたスーパークラスのメンバーはサブクラスから直接アクセスは
できませんが、継承はされています。

Sample47_1を書き換えてみましょう。

サンプルプログラム(Sample47_2.java)

class Sample47_2{
    public static void main(String args[]){

    Sub47_2 obj = new Sub47_2();
    obj.method();
    obj.method1();

    }

}

class Super47_2{
     private int x = 10;
    
    void method(){
   System.out.println(" private int x = " + x);
     }
    
}

class Sub47_2 extends Super47_2{
      private int y = 20;
   
      void method1(){
     System.out.println(" private int y = " + y);
} }

プログラムをコピーする場合すべて選択をクリックしてください。

Sponsored link

コンパイル・実行してみます。

private int x , y をそれぞれprivate 宣言している中のメソッド内で呼び出しました。
今度は無事に実行され出力されました。

ここまでは,メンバー変数に見てきましたが、もちろんメンバーメソッドの場合も同じです。

ページのトップへ戻る