Posted at

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

More than 3 years have passed since last update.


はじめに

最近、バイト先や通ってる施設などでコミュニケーション取る機会が増えて嬉しいです :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: