前回の記事では クラスとオブジェクト を学び、
「設計図(クラス)から実体(オブジェクト)を作る」仕組みを理解しました。
今回はそこから一歩進んで、
オブジェクトを作る時に自動で呼ばれる特別なメソッド コンストラクタ と、
データを安全に守るための仕組み カプセル化(getter/setter) を学びます。
これらは Java の基礎の中でもとても大切で、
この先の実務でも必ず使う知識なので、丁寧に解説していきます。
この記事で学べること
- コンストラクタとは何か?
- なぜコンストラクタを使うのか?
- カプセル化とは何か?
- アクセス修飾子(public / private)
- getter / setter の役割
- 「安全なクラス設計」がどういうことか
コンストラクタとは?(まずはイメージから)
コンストラクタとは、
オブジェクトが作られた瞬間に自動で呼ばれるメソッド のことです。
▼ 例えるなら?
- クラス=家の設計図
- オブジェクト=建てられた家
- コンストラクタ=家を建てるときの「初期工事」
家を建てる時、最初に土台を作ったり配線を通したりしますよね。
コンストラクタは その初期設定を行う場所 だと思えばOKです。
コンストラクタの書き方(基本)
コンストラクタは クラス名と同じ名前 で書きます。
public class Person {
String name;
int age;
// これがコンストラクタ
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
呼び出し(= オブジェクトを作る)
Person p = new Person("太郎", 20);
すると、
オブジェクト作成と同時に、name と age に値がセットされます。
今までのようにいちいち「person.name = “太郎”」などと書かなくてもいいのです!
this の意味とは?
this.name = name; のように書く理由は、
「フィールドの name と、引数の name を区別するため」です。
- this.name → フィールドの name
- name → メソッドの引数(呼び出しの際に値をセットしている場所)
「このクラスの name に、引数の name を代入するよ」という意味になります。
カプセル化とは?
カプセル化は、
オブジェクトの中の大事なデータ(フィールド)を守る仕組み です。
たとえば Person クラスに年齢があるとして、
誰かが外部から勝手にこう書いたらどうでしょう?
p.age = -999;
これって、絶対におかしいですよね…。
実際のアプリでも、ユーザーに不正な値を入れられると大問題になります。
そこで Java では 大事なデータは直接触らせないようにする のが基本です。
private でデータを守る
フィールドを private にすると、
クラスの外から直接アクセスできなくなります。(別のクラスから使うようなperson.nameのこと)
public class Person {
private String name; // 外から触れない
private int age; // 外から触れない
}
ではどうやって値を取り出すの? → getter / setter
外部から直接触れなくなる代わりに、
安全に値を取得・変更するための窓口 を用意します。
それが getter / setter です。
getter:値を取り出すメソッド
public String getName() {
return name;
}
setter 値を変更するメソッド
public void setAge(int age) {
if (age < 0) {
System.out.println("年齢は0以上を設定してください");
return;
}
this.age = age;
}
setter には「おかしな値が入らないようにチェック」も書けます。
コンストラクタ + カプセル化の完成形
public class Person {
private String name;
private int age;
// コンストラクタ(初期設定)
public Person(String name, int age) {
this.name = name;
setAge(age); // setter を使って安全にセット
}
// getter
public String getName() {
return name;
}
// setter(年齢のチェック付き)
public void setAge(int age) {
if (age < 0) {
System.out.println("年齢は0以上にしてください");
return;
}
this.age = age;
}
// メソッド
public void greet() {
System.out.println("こんにちは!私は " + name + " です。年齢は " + age + " 歳です。");
}
}
使い方
Person p = new Person("太郎", 20);
p.greet();
System.out.println(p.getName());
p.setAge(30);
p.setAge(-999); // -> チェックに引っかかる
初心者が特につまずくポイントを整理
| ポイント | やさしく説明すると… |
|---|---|
| コンストラクタ | オブジェクトを作った瞬間に動く「初期設定」 |
| this | 「このクラスのフィールドだよ」と区別する言葉 |
| private | フィールドに直接触れないようにする鍵 |
| getter | 外からフィールドを“見る用の窓” |
| setter | 外から“値を変えるための窓” |
| カプセル化 | データを勝手に壊されないように守る仕組み |
最後に なぜカプセル化は大事?
実際のアプリ開発では、
クラスには「名前」「金額」「在庫数」「パスワード」など重要な値がめちゃくちゃあります。
これを外から好き勝手に変更されたら…
- 不正なデータが入る
- 計算結果が壊れる
- セキュリティ事故が起きる
こういった問題を防ぐ上で、
カプセル化は必須の知識 なのです。

コメント