初心者向けのJava講座です。一緒にJavaを勉強しませんか?
はじめてのJava入門初心者向けのJava講座 |
アクセス修飾子
アクセス修飾子とはメンバーに対して
どれだけ遠くに存在するクラスからメンバーにアクセスできるかどうかということを
決めるために用いる修飾子です。
アクセス修飾子の種類
アクセス修飾子 |
アクセスできる範囲 |
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 int x は Super47_1の中でしかアクセスできないことになります。
したがって、 x は Super47_1 で 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 宣言している中のメソッド内で呼び出しました。
今度は無事に実行され出力されました。
ここまでは,メンバー変数に見てきましたが、もちろんメンバーメソッドの場合も同じです。