筋トレ大好きな文系女学生のJava入門_カプセル化_privateとpublic


はじめに

最近、バイト先や通ってる施設などでコミュニケーション取る機会が増えて嬉しいです
「変わってる」とか「なんか面白いよね〜」といった言葉をよく言われます・・。笑
バイト始める以前は、家で何かして夕方からスポーツジム行くを毎日繰り返していたので、1日のうちに人と話すことが0の時もありました笑
なので、コミュニケーション取ることってマジでホンマに重要なんだな〜と心から強く思いました

今回はアクセス制御privateとpublicについてです。
独学でやってるので、「これはJavaやっていくにあたって役に立つ知識だぞ!!」というのがあれば、コメントして頂けるととても嬉しいです

アクセス制御

Javaでは、メンバ(フィールドやメソッド)に対してアクセス制御の設定を行うことができる。
だけど、それぞれのメンバに「MuscleBoyクラス、MuscleGirlクラスからの利用は許す」「Proteinクラス、Trainerクラスからの利用は許す」のように細かく指定するのは面倒くさい!そこで、下の表にあるpublicやprivateといったアクセス修飾子をメンバの前で宣言することで、アクセス制御が可能になる

  【フィールドのアクセス制御】
アクセス修飾子 フィールド宣言;

  【メソッドのアクセス修飾子】
アクセス修飾子 メソッド宣言{...}

privateを利用

筋トレ大好きな文系女学生のJava入門_カプセル化の目的&メリットでは、筋肉ボーイのHPが-100になってしまう大変な事態が起こってしまった。そこで、他のクラスから筋肉ボーイのHPを変更されないようhpフィールドにprivate宣言をする。

1 public class MuscleBoy{
2  private int hp;
3  String name;
4  static int money;
5
6  void sleep(){
7   this.hp = 100;
8   System.out.println(this.name + "は、寝て体力を回復した!!");
9  }
10}

hpフィールドにprivateを指定したため他のクラスでhpフィールドを変更した場合、「hpフィールドへはアクセスできない」というコンパイルエラーが発生する。
しかし!!筋肉ボーイのHPが一切変更することができなというわけではない!

privateなフィールドであっても、「this」を用いたsleepメソッドのように、同じクラスのメソッドからであればhpフィールドの値を変更することができるのだ

publicやpackage privateを利用

筋肉ボーイは生けた芸術作品である筋肉を鍛えることがお仕事であるため、いろいろなクラスから呼び出せるように、workOutメソッドにpublic宣言をする。

1  public class MuscleBoy{
2    private int hp;
3    String name;
4    static int money;
5
6    void sleep(){....}
7
8    public void workOut(){
9      this.hp -= 10;
10     System.out.println(this.name + "は、筋トレをした!");
11     System.out.println("-10ポイントHPが減少した!");
12   }
13 }

sleepメソッドにはpublicを付けないままにしている。この場合、sleepメソッドはpackage privateを指定したとみなされ、同じパッケージに所属するクラスからのみ呼び出しが可能