Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

Javaではクラスやメソッド・フィールドの前にアクセス修飾子(private・public・protected)を付与することで、データにアクセス出来る範囲を指定します。

本記事では、Java初心者の方向けにアクセス修飾子privateの使い方をクラス・メソッド・フィールドでサンプルコードを掲載しながらご紹介していきます。

private修飾子とその他アクセス修飾子の違い


アクセス修飾子の1つである「private」は、同一クラス内でのみデータにアクセスすることが可能となります。

privateのアクセス範囲
  • 同一クラス: 可
  • 同一パッケージ: 不可
  • 別パッケージのサブクラス: 不可
  • 別パッケージのサブクラス以外:不可

その他アクセス修飾子との違い

privateのアクセス範囲と同様に「public」「protected」「指定なし」の場合のアクセス範囲についても確認しておきましょう。

各修飾子のアクセス範囲
  • public
    • 同一クラス: 可
    • 同一パッケージ: 可
    • 別パッケージのサブクラス: 可
    • 別パッケージのサブクラス以外:可
  • protected
    • 同一クラス: 可
    • 同一パッケージ: 可
    • 別パッケージのサブクラス: 可
    • 別パッケージのサブクラス以外:不可
  • 指定なし
    • 同一クラス: 可
    • 同一パッケージ: 可
    • 別パッケージのサブクラス: 不可
    • 別パッケージのサブクラス以外:不可
ポテパンダの一言メモ

指定なしというのは「void メソッド名」のように、アクセス修飾子の指定をせず定義することを意味しています。

privateクラスの使い方


privateクラスは、他の外部クラスから呼び出されたくないクラスを定義する際に記述します。

内部クラスを定義する場合、1つのファイルにプログラムが増加する傾向にあり、privateクラスが利用される機会はそれほど多いわけではありません。

privateクラスを呼び出すサンプル

「Sample」クラスに定義した「PrivateSample」クラスを呼び出すサンプルコードが下記となります。

  1. package sample;
  2.  
  3. public class Main {
  4. public static void main (String args[]) {
  5.  
  6. Main sampleMain = new Main();
  7. PrivateSample ps = sampleMain.new PrivateSample();
  8. ps.execute();
  9. }
  10.  
  11. private class PrivateSample {
  12. void execute() {
  13. System.out.print("テスト実行");
  14. }
  15. }
  16. }

実行結果

  1. テスト実行

privateクラスが呼び出せないサンプル

下記のように外部のクラスからprivateクラスを呼び出そうとするとコンパイルエラーとなります。

  1. package sample;
  2.  
  3. public class Main {
  4. public static void main (String args[]) {
  5.  
  6. }
  7.  
  8. private class PrivateSample {
  9. void execute() {
  10. System.out.print("テスト実行");
  11. }
  12. }
  13. }
  14.  
  15. class Sample {
  16. Main.PrivateSample sample;
  17. }

「型 Main.PrivateSample は不可視です」のエラーとなりコンパイルが出来ません。

privateメソッドの使い方


privateメソッドはクラス内部でのみ使用したい処理を記述する際に利用します。

privateメソッドを呼び出すサンプル

同一クラス内のmainメソッドから直接privateメソッドを呼び出すパターンと、外部クラスのprivateメソッドをpublicメソッドを経由して呼び出す2つのパターンを実行するサンプルです。

  1. package sample;
  2.  
  3. public class Main {
  4. public static void main (String args[]) {
  5. privateSample1("内部からの呼び出し\n");
  6. Sample sample = new Sample();
  7. sample.publicSample();
  8. }
  9.  
  10. private static void privateSample1(String str) {
  11. System.out.print(str);
  12. }
  13. }
  14.  
  15. class Sample {
  16.  
  17. public void publicSample() {
  18. privateSample2("外部メソッド経由の呼び出し");
  19. }
  20.  
  21. private void privateSample2(String str) {
  22. System.out.print(str);
  23. }
  24. }

実行結果

  1. 内部からの呼び出し
  2. 外部メソッド経由の呼び出し

「privateSample1」のメソッドに関しては、呼び出し元の「main」メソッドと同一クラス内に存在するため問題なく処理を呼び出すことが出来ます。

外部クラスの「Sample」に記述している「privateSample2」に関しては「publicSample」を経由することで処理を実施しています。

privateメソッドを呼び出せないサンプル

では上記サンプルで「privateSample2」を直接「main」メソッドから呼び出す記述に変更してみましょう。

  1. package sample;
  2.  
  3. public class Main {
  4. public static void main (String args[]) {
  5. Sample sample = new Sample();
  6. sample.privateSample2("直接呼び出し");
  7. }
  8.  
  9. }
  10.  
  11. class Sample {
  12. private void privateSample2(String str) {
  13. System.out.print(str);
  14. }
  15. }

「メソッド privateSample2(String) は型 Sample で不可視です」のエラーとなりコンパイルが出来ません。

privateフィールドの使い方


privateフィールドは、外部から直接フィールド値を変更してもらいたくない場合に利用します。

Javaのシステム開発では、基本的にメンバー変数であるフィールドはprivateに設定し、ゲッター(getter)・セッター(setter)と呼ばれるアクセス用のメソッドを公開する方法が一般的です。

privateフィールドに直接アクセスするサンプル

同一クラス内であれば、直接フィールドの値を書き換えることは可能です。

外部クラスから値を変更したい場合は、セッターメソッドを呼び出し値を変更した上でゲッターメソッドで値を取得するか、別途用意したメソッド内で処理を完結させる方法で実現出来ます。

  1. package sample;
  2.  
  3. public class Main {
  4.  
  5. public static void main (String args[]) {
  6. Sample sample = new Sample();
  7.  
  8. sample.execute();
  9.  
  10. sample.setText2("\nセッターから値を設定");
  11. System.out.print(sample.getText2());
  12. }
  13.  
  14. }
  15.  
  16. class Sample {
  17.  
  18. private String text1;
  19. private String text2;
  20.  
  21. public String getText2() {
  22. return text2;
  23. }
  24.  
  25. public void setText2(String text2) {
  26. this.text2 = text2;
  27. }
  28.  
  29. public void execute() {
  30. this.text1 = "フィールドに直接値を設定";
  31. System.out.print(this.text1);
  32. }
  33.  
  34. }

実行結果

  1. フィールドに直接値を設定
  2. セッターから値を設定

privateフィールドに直接アクセス出来ないサンプル

外部クラスから下記のように直接privateフィールドにアクセスしようとした場合はエラーとなります。

  1. package sample;
  2.  
  3. public class Main {
  4.  
  5. public static void main (String args[]) {
  6. Sample sample = new Sample();
  7.  
  8. sample.text1 = "この方法では値は設定できません。";
  9. }
  10.  
  11. }
  12.  
  13. class Sample {
  14.  
  15. private String text1;
  16.  
  17. }

「フィールド Sample.text1 は不可視です」のエラーとなりコンパイルが出来ません。

さいごに: private修飾子を使いこなしてJavaのアクセス範囲を適切に定義しよう


本記事では、Javaのアクセス修飾子の1つである「private」の使い方についてご紹介していきました。

予期せぬエラーやセキュリティ上の問題を起こさせないためにも、アクセス範囲を最小限に限定することは大切です。

データの修正が簡単だからとpublic修飾子ばかり使うのではなく、今回ご紹介したようなprivateやprotectも利用して、適切なデータ範囲を定義するよう意識しておきましょう。

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。