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


はじめに

こんばんは。またたびです。

記事を書き始めて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版 (スッキリシリーズ)