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アプリケーションについての記事をまとめた。
-
-
Javaでwebアプリケーションを作る
ここでは、Javaでのwebアプリケーションの作成についてまとめていく。 そもそもwebアプリケーションとは? そもそもwebアプリケーションとは何か?ウェブサイトとの違いは? 下記にまとめた。 ...
続きを見る
コンピューターについての全体像も把握しておくと、プログラミングのさらなる理解に役立つ。
-
-
Screen-Shot-2021-06-11-at-11.45.16
続きを見る
今回使ったコード
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);
}
}