前回はコンストラクタについて学習しました。
コンストラクタを利用すると、オブジェクトの生成と同時に初期値を設定できることが分かりました。
今回は、オブジェクト指向の重要な考え方の一つであるカプセル化について学んでいきます。
カプセル化とは、データを勝手に変更されないように保護する仕組みです。
例えば、自動車の速度を考えてみましょう。
もし誰でも自由に速度を変更できたら、マイナスの速度やあり得ない速度が設定できてしまいます。
そこで、必要な方法でしかデータを変更できないようにするのがカプセル化です。
public class Car {
public int speed;
}
Car car = new Car();
car.speed = -100;
このように、どこからでも自由に値を変更できてしまいます。
そこで利用するのがprivateです。
public class Car {
private int speed;
}
privateを付けると、クラスの外から直接アクセスできなくなります。
getterは、データを取得するためのメソッドです。
public int getSpeed() {
return speed;
}
値を確認したいときに利用します。
setterは、データを変更するためのメソッドです。
public void setSpeed(int speed) {
this.speed = speed;
}
setterを利用することで、データの変更方法を管理できます。
public class Car {
private int speed;
public void setSpeed(int speed) {
this.speed = speed;
}
public int getSpeed() {
return speed;
}
}
public class Main {
public static void main(String[] args) {
Car car = new Car();
car.setSpeed(60);
System.out.println(car.getSpeed());
}
}
60
setterを利用すると、値のチェックも行えます。
public void setSpeed(int speed) {
if (speed >= 0) {
this.speed = speed;
}
}
このようにすることで、マイナスの速度が設定されるのを防ぐことができます。
car.speed = 100;
privateのメンバには直接アクセスできません。
privateだけにすると、値の取得や変更ができなくなります。
speed = speed;
引数とフィールドの名前が同じ場合は、thisを使って区別します。
次回は、継承について解説します。