[Java] アクセス修飾子のpublicとprivateの違い
Javaのpublicとprivateの違いについて解説する。
そもそもアクセス修飾子とは?
変数やメソッドに対してのアクセスをコントロールするもの。
他のクラスからアクセスしていいかどうかの許可の指定ができる。
なぜアクセスをコントロールする必要があるのか?
アクセスのコントロールによって、使える変数の範囲(変数のスコープ)が決まる。
変数のスコープを設定し、なるべく関係のない情報は参照できないようにすることで、プログラムを整理するのがメリット。
ちなみにアクセス修飾子の種類には何がある?
- public
- private
- protected
- 指定なし(デフォルト)
の四種類がある。
今回はpublicとprivateに特化して整理する。
privateの使い方
privateを使用した場合、自クラス内のみからのみ、アクセスが可能となる。
privateを使う場合は、変数、メソッドに指定することができるが、クラスには指定はできない。
`//クラスで指定はできない private class Sample// 変数はOK private String name;
//メソッドもOK private void method()`
下記に例として、変数にprivateを使って別クラスで呼び出す。

呼び出す時は、publicであるmountainMethodのメソッド経由で呼び出している。
ではこれをprivateである変数経由で呼び出そうとするとどうなるか。

`mountainName has private access in Mountain System.out.println`
エラーの通り、変数mountainNameはprivateに設定してるから、アクセスできないよ!というエラーが起きる。
これを解決するには、これから述べる通り、変数で設定したアクセス修飾子をpublicにして外部からもアクセスできるようにするか、先程の例の通り、メソッド経由で呼び出す。
比較
privateの変数を呼び出すには、publicで定義されたメソッドで呼び出す。エラーが出るのはprivateで設定した変数をそのまま別クラスで呼び出そうとする場合。

publicの使い方
publicでは、privateのように制限がかかっていないため、外部からでも変数で呼び出せる。
先程の例では、変数で呼び出すとエラーになったが、今度は、Mountainクラスの変数をprivateからpublicに変えて実行してみる。

privateの変数をpublicでは、外部からのアクセスもできるので、そのまま、変数で呼び出せる。
アクセス修飾子に関しての関連記事
下記に、アクセス修飾子に関しての関連記事をまとめた。
全体像を把握する
下記にJavaやwebアプリケーションについての記事をまとめた。
[st-card myclass="" id=3431 label="" pc_height="" name="" bgcolor="" color="" fontawesome="" readmore=“on”]
コンピューターについての全体像も把握しておくと、プログラミングのさらなる理解に役立つ。
[st-card myclass="" id=4587 label="" pc_height="" name="" bgcolor="" color="" fontawesome="" readmore=“on”]
今回使ったコード
private変数をメソッド経由で呼び出す。
`class Mountain {
//フィールド変数
private String mountainName = "金峰山";
//private変数を外部で呼び出すためのメソッドを定義
public void mountainMethod() {
System.out.println(mountainName + "に行きたい。");
}
}
public class Main {
public static void main(String[] args) {
//インスタンス生成
Mountain mountain1 = new Mountain();
//private変数をメソッド経由で呼び出す。
mountain1.mountainMethod();
}
}`
private変数を外から呼び出すとエラー
`class Mountain {
//フィールド変数
private String mountainName = "金峰山";
//メソッドを定義
public void mountainMethod() {
System.out.println(mountainName + "に行きたい。");
}
}
public class Main {
public static void main(String[] args) {
//インスタンス生成
Mountain mountain1 = new Mountain();
//private変数を外部で呼び出ししようとするとエラー
System.out.println(mountain1.mountainName);
}
}`
publicの 変数は外部から呼び出せる
`class Mountain {
//フィールド変数をpublicに変更
public String mountainName = "金峰山";
public void mountainMethod() {
System.out.println(mountainName + "に行きたい。");
}
}
public class Main {
public static void main(String[] args) {
//インスタンス生成
Mountain mountain1 = new Mountain();
//public変数を他のクラスから呼び出し
System.out.println(mountain1.mountainName);
}
}
`