導入
銀行口座の残高を、誰でも自由に書き換えられるとしたら怖くありませんか? うっかりミスや不正な操作で、残高がマイナスになってしまうかもしれません。フィールドをそのまま公開しておくと、こういう事故が起きます。
説明
まずは問題を体感してみましょう。次のコードでは BankAccount の balance フィールドが誰からでも自由に書き換えられる状態(public 相当)になっています。
public class Main {
public static void main(String[] args) {
BankAccount acc = new BankAccount();
acc.balance = 1000;
acc.balance = -5000; // 本来ありえない値も、そのまま入ってしまう
System.out.println(acc.balance);
}
}
class BankAccount {
int balance;
}
実行すると -5000 がそのまま表示されます。残高がマイナスというありえない状態を、誰でも簡単に作れてしまうのです。
カプセル化 とは、フィールド(データ)を外から直接いじれないように隠し、決まったメソッドを通してだけ操作させる考え方です。次のレッスンから、private を使ってこれを実現する方法を見ていきます。
やってみよう
下のエディタを実行して、おかしな値がそのまま入ってしまうことを確認しましょう。-5000 以外の変な値(999999999 など)を入れても同じように通ってしまうことも試してみてください。
演習
Fridge(冷蔵庫)というクラスを作り、int temp というフィールドを持たせてください。main で Fridge のインスタンスを作り、temp に 1000(明らかにおかしい温度)を直接代入して、その値を表示してください。
ヒント1を見る
class Fridge { int temp; } と書き、Fridge f = new Fridge(); でインスタンスを作ります。
ヒント2を見る
f.temp = 1000; のあと System.out.println(f.temp); で表示します。