Help us understand the problem. What is going on with this article?

Java言語におけるクラスとは(3/?)

More than 1 year has passed since last update.

はじめに

こんばんは。またたびです。
記事を書き始めて3日目になりました。
今日も頑張ります。

カプセル化

今日はカプセル化について書いていきます。
作成したクラスに対してアクセスするインターフェースを明確にすることがカプセル化です。
以下にカプセル化の範囲と指定方法を示します。
非常にわかりやすい表が参考文献に記載されているため、そちらを使わせていただきます。

名前 プログラム中の指定方法 アクセスを許可する範囲
private private 自分自身のクラスのみ
package private 何も書かない 自分と同じパッケージに属するクラス
protected protected 自分と同じパッケージに属するか、自分の継承をした子クラス
public public 全てのクラス

これまでmainメソッドを書くときにpublicと付けていたと思いますがこれはカプセル化を用いています。
mainメソッドはプログラムを実行した際に呼び出されるメソッドですので、この部分をprivateにするとエラーになり実行されません。

それではこれから例を用いてstaticの説明をしていきます。
protectedは継承を説明する際に書いていくので今回は触れません。

Num.java
public class Num{
  static int a = 10;
}

この時、privateで定義しているフィールドを別クラスのmainメソッドにて呼び出そうとすると、エラーとなり実行されません。
そのためにゲッターとセッターというメソッドを作成します。

Num.java
public class Calc{
  static int a = 10;

  public int getA(){
   return this.a; 
  }
  public void setA(int a){
   this.a = a; 
  }
}

このゲッター、セッターメソッドを用いることで、クラスcalcのフィールドaとbの値を呼び出す、書き込むことが出来ます。

面倒くさがって全てをpublicにしていまうと、本当に想定外の場所でフィールドの値が書き換わってしまい、エラーは発生しないので、可能であればフィールドにはprivateを用いたほうがいいと思います。
またこれと同時に、メソッドの引数とクラス内に定義している変数の区別をつけるために、クラス内に定義しているフィールドにはthisをつけたほうがいいと思います。

おわりに

今日は無気力症候群が発生し、何もしていませんでした。
正直記事を書こうか悩んだくらいです。。。
インプットていないため、アウトプットが出来ず分量が少なくて申し訳ありません。。。
でも気合を入れたら書けたのでこの調子で今後も頑張って書いていこうと思います。
次回は後輩に進捗を聞かれそうなので、最近勉強を始めたVue.jsについて書いていきます。
Vue.jsを知らない方にもわかるよう頑張って書いていきます。
今回の記事にもミスや表現の違い等あればご指摘いただけると幸いです。

参考文献

スッキリわかるJava入門 第2版 (スッキリシリーズ)

matatabi_data
しがない大学院生をやっております。 Twitterをやっておりますのでフォローお待ちしております。頻度は() @matatabi_data
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away