Javaクラスとオブジェクト理解:明確な概念と実践例
クラスとオブジェクトはJavaのオブジェクト指向プログラミングの核心です。密接に関連しながらも、それぞれ異なる役割を果たします。このガイドでは違いを明確にし、実例で実装方法を解説します。
Javaにおけるクラスとは
クラスは、オブジェクト群に共通する構造と振る舞いを定義する青写真(設計図)です。オブジェクトが持つデータフィールド(属性)とメソッド(関数)を指定します。
クラス構文
class <ClassName> {
// フィールド
// メソッド
}
Javaにおけるオブジェクトとは
オブジェクトはクラスのインスタンスです。独自のメモリ位置を持つ具体的なエンティティで、クラスで定義されたフィールドの値を保持します。オブジェクトのメソッドを呼び出すとき、その特定インスタンスにアクションを実行させます。
オブジェクト作成構文
ClassName obj = new ClassName();
クラスとオブジェクトの主な違い
- クラス — 型の抽象的定義(青写真)
- オブジェクト — その青写真から作成された具象的インスタンス
実例:ペット管理システム
犬のデータ管理システム構築を想像。共通属性(品種、年齢、サイズ、色)と振る舞い(食べる、寝る、座る)を特定。これらがDogクラスのデータメンバーとメソッドになります。
システム内の各犬について、それら属性の具体的値を持つ新しいDogオブジェクトをインスタンス化。

Javaクラス設計原則
- 単一責任原則(SRP) — クラスに変更理由は1つだけ
- 開放閉鎖原則(OCP) — クラスは拡張に開かれ、修正に閉じているべき
- リスコフ置換原則(LSP) — 派生クラスは基底クラスの代わりとして振る舞えるべき
- 依存性逆転原則(DIP) — 具象ではなく抽象に依存すべき
- インターフェース分離原則(ISP) — クライアントニーズに合わせた細粒度インターフェース提供
プログラム例1:mainをクラス内に配置
// クラス宣言
public class Dog {
// インスタンス変数
String breed;
String size;
int age;
String color;
// 犬情報返却メソッド
public String getInfo() {
return "Breed is: " + breed + " Size is:" + size + " Age is:" + age + " color is: " + color;
}
public static void main(String[] args) {
Dog maltese = new Dog();
maltese.breed = "Maltese";
maltese.size = "Small";
maltese.age = 2;
maltese.color = "white";
System.out.println(maltese.getInfo());
}
}
出力:
Breed is: Maltese Size is:Small Age is:2 color is: white
プログラム例2:mainを別クラスに分離
// Dogクラス定義
class Dog {
String breed;
String size;
int age;
String color;
public String getInfo() {
return "Breed is: " + breed + " Size is:" + size + " Age is:" + age + " color is: " + color;
}
}
// mainメソッドを持つ別クラス
public class Execute {
public static void main(String[] args) {
Dog maltese = new Dog();
maltese.breed = "Maltese";
maltese.size = "Small";
maltese.age = 2;
maltese.color = "white";
System.out.println(maltese.getInfo());
}
}
出力:
Breed is: Maltese Size is:Small Age is:2 color is: white
まとめ
- Javaクラスは、その型のすべてのオブジェクトに共通する構造と振る舞いを定義
- オブジェクトはクラスのインスタンスで、固有データを保持しメソッドを実行可能
- 継承、メソッドオーバーライド等のOOP概念でクラスを拡張し複雑システムを構築
Java
- C++クラスとオブジェクト:コード例付き実践ガイド
- C#抽象クラス実践チュートリアル:コード例で理解する設計パターン
- C#インターフェース完全解説:定義、実装例、実践的活用法
- C#シリアライゼーションとデシリアライゼーション:実践例で学ぶオブジェクト永続化
- Javaクラスとオブジェクト:実践ガイド
- Java抽象クラスとメソッド:包括的ガイド
- Javaネストクラスとインナークラス完全ガイド:種類、例、ベストプラクティス
- Javaシングルトンパターン完全解説:安全な実装と活用法
- Javaオブジェクトとクラス:コアOOP概念を完全理解
- Java日付時刻完全ガイド:Date/Calendar/SimpleDateFormat/printf
- Javaオブジェクト直列化: オブジェクトの持続化と復元(Serializable/transient/ObjectOutputStream)