LoginSignup
0
0

More than 1 year has passed since last update.

カプセル化の演習(setterに戻り値つけて笑われた話)

Posted at

問題

口座から引き出す機能のみをもったシステムを実装してください。

public class ATM {
    public static void main(String[] args) {
		
		BankAccount myAccount = new BankAccount();
		myAccount.setWithdrawal(800);//800円を引き落とす。
        myAccount.setWithdrawal(-800);//不正に残高を増やそうと試みるw
		System.out.println("現在の預金残高:" + myAccount.getBalance() + "円");
	}
}
//演算結果
//入力された数値が正しくありません。
//現在の預金残高:9200円


class BankAccount {
	//預金残高を保存するプライベートなインスタンス変数balanceを定義
	private int balance;
	
	public BankAccount() {
		this.balance = 10000;//口座の予算を10000円に設定するコンストラクタ
	}
	// 	プライベートなインスタンス変数balanceのgetterメソッド
	public int getBalance() {
		return this.balance;
	}

	//  プライベートなインスタンス変数balanceのsetterメソッド
	public void setWithdrawal(int withdrawal) {
		if(withdrawal >= 0) {//不正に残高を増やせないよう対策
			this.balance -= withdrawal;
		}else {
			System.out.println("入力された数値が正しくありません。");
		}
	}
}

補足

  • カプセル化
    →private修飾子を使うことで参照したり更新したりできないようにする。
  • getter、setter
    →名前の通り、privateな変数を参照(get)したり、更新(set)したりするメソッド。もちろんpublicなメソッド。
    →どちらかに条件をつけて機能に制限を設けたり、getterだけにして参照しかできないようにしたりできる。
    →Eclipseだと自動で作ってくれる機能あり(便利!)
    image.png

setterに戻り値つけて笑われた

geetterはpublic int getBalance()のように修飾子の後に戻り値の方を書きます。
setterはpublic void setWithdrawal(int withdrawal)のようにvoidをつけて書きます。
ところが私は間違えてpublic int setWithdrawal(int withdrawal)と書いていました。引数が間違っているのでそもそもコンパイルエラーですが、もし引数名と変数名が同じものでしたらそのまま動きます。しかし講師の方に指摘されたのは「getterいらなくなりません?」

たしかに!!

まあおかげでしっかり覚えられました。w

0
0
2

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