Challenge programming

Java

カプセル化 privateを使って。

オブジェクト指向には、安全で、壊れにくくて、作りやすくする機能が用意されています。それが「カプセル化」「継承」「ポリモーフィズム」です。今回はその中でもカプセル化について学んでいきましょう。

カプセル化

見せたくないものを隠して、部品として使いやすくする機能。フィールドやメソッドに公開(public)にするか、非公開(private)にするか指定することが出来る。実際にはクラスの外部からアクセスできなくさせる。アクセスするとエラーになるようにする。

カプセル化する方法

公開してもいいものにはフィールドやメソッドの頭に「public」を記述する。逆に公開したくないものには「private」を記述します。これをアクセス修飾子といいます。

アクセス修飾子働き
private クラスの内部でアクセスできる。クラスの外部からはアクセスできない。
publicクラスの内部でも、クラスの外部からでもアクセスできる
何も書かないクラスの内部でも、同じパッケージのクラスからでもアクセスできます。publicに近い形です。

外部から利用できるフィールドやメソッド

public データ型 フィールド名;

public 戻り値の型 メソッド名(){

メソッドで行う処理

}

外部から勝手に使われると困るときのフィールドやメソッド

private データ型 フィールド名;

private 戻り値の型 メソッド名(){

メソッドで行う処理

}

getter、setterで値を取得したり、書き込む

一般的にJavaではフィールドに直接アクセスできないようになっていますが、フィールドにアクセスできる専用のメソッドがあります。

フィールドの値を読む、読み取り専用のget(ただし書き換えることはできない)

書式:getterを使うとき

private データ型 フィールド名;

public データ型 getフィールド名(){

return フィールド名;

}

フィールドに値を書き込むset

書式:setterを使うとき

private データ型 フィールド名;

public void setフィールド名(データ型 引数名){

フィールド名 = 引数名;

}

書式:<setterをチェックをかけて使うとき>

private データ型 フィールド名;

public void setフィールド名(データ型 引数名){

if(条件式){

フィールド名 = 引数名;

}

}

実演

まずは、フィールドは簡単に書き換えられることを見てみましょう。

自分の名前を言ってあいさつするクラスを作成します。

MyClass.java

次に、Main.javaファイルに最初に実行するクラスを作ります。

Main.java

最初に「関」と命名しましたが、あとからでも命名できて簡単に書き換えられることがわかります。

そこで、カプセルを使います。フィールドをprivateに隠して、読み書きできるメソッドを用意して制限します。制限は「もし、myNameが空っぽだったら名前を書き込める、そうでないなら何もしない」というif文を使います。

MyClass.java

実行してもエラーになります。これは、フィールドをprivateにしたためです。「public void setMyName(~」によってsetterメソッドを使わないと書き込めないようにします。そこでMain.javaファイルを修正します。エラー内容もMain.javaファイルを表示しています。

Main.java

赤線のように変更すれば、あとから命名しても変わらなくできました。

改名用のメソッドを作る

改名用の新しいメソッドを作ることによって、それを選ばないといけなくなるから注意しますよね。誤って書き換えるミスをなくすことができます。

出来たらMain.javaファイルに移り、新しく作ったメソッドにアクセスしてみましょう。

改名することができましたね。


Java1年生 体験してわかる!会話でまなべる!プログラミングのしくみ / 森巧尚 【本】

この本から引用、参考にして学びました。この本ではキャラクターが対話しながら進み、あきることなく図解などを多用して初心者が始めるにはとても分かりやすい本です。
身に付け消えないスキルが約2,000円ならコスパよく、買っておいてよかったと満足してます。


短期間でのレベルアップにはプロから学ぶのもありです。

キャリアアップに必要なスキルを取得しよう。

オンラインで受講ができるスクールですので、全国どこからでも。

就職・転職支援

ぺージの先頭に戻る(Return to top of page)


©2020年9月 Challenge programming

プライバシーポリシー