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

  • 0
    いいね
  • 0
    コメント
    この記事は最終更新日から1年以上が経過しています。

    はじめに

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

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

    アクセス制御

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

    スクリーンショット 2016-04-24 10.21.08 AM.png

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

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

    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フィールドの値を変更することができるのだ :exclamation:

    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を指定したとみなされ、同じパッケージに所属するクラスからのみ呼び出しが可能 :exclamation: :exclamation: