LoginSignup
0
0

More than 5 years have passed since last update.

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

Posted at

はじめに

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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0