Javaのオブジェクト指向とは? クラスとオブジェクトの違いを例えで解説
目次
こんにちは! 内定者向けのJava Bronze受験対策で講師役の経験がある田口です。
AMG Solutionでは未経験者のプログラミング基礎学習として、Java Bronzeの合格を目指した学習を取り入れています。未経験者にとっては初めて触れる概念が多く、苦戦するポイントも多々あります。
今回は、オブジェクト指向を学ぶ中でつまずきやすい「クラス」と「オブジェクト」について、2つの例えを使って分かりやすく解説します。オブジェクト指向を理解する切り口として、参考にしていただけると嬉しいです。
オブジェクトとクラスとは?
この記事を読んでいる方は、オブジェクト指向という言葉は学んだけれど、まだ十分に理解できていない方も多いのではないでしょうか。まずは言葉の意味を簡単におさらいしましょう。
ChatGPTに「オブジェクト指向のオブジェクトとクラスとは何か、簡単に教えてください。」と聞いてみました。回答はこちらです。
オブジェクト指向における「オブジェクト」と「クラス」は、以下のように簡単に説明できます。
オブジェクト
定義: クラスをもとに作られた具体的な実体です。
例: 「犬」というオブジェクトは、名前や年齢を持ち、吠えることができる。
クラス
定義: オブジェクトを作るための設計図です。どんな属性やメソッドを持つかを定義します。
例: 「犬」クラスは、犬の属性(名前、年齢)やメソッド(吠える)を定義する。
まとめ
クラスはオブジェクトの設計図で、オブジェクトはその設計図をもとに作られた具体的なものです。
……とのことです。ここまでの説明で理解できた方は、オブジェクトとクラスの基本を押さえられています。引き続き学習を頑張ってください! まだ分かりにくいという方は、次の例えを見ていきましょう。
人形焼きと金型で例える
お土産の定番、人形焼きで見ていきましょう。ここでは次のように例えてみます。
オブジェクト:人形焼き
クラス:金型

人形焼きはあんこやカスタードといった中身(具体的なデータ)を持った実体です。金型は人形焼き(オブジェクト)を作るための型(設計図)で、人形焼きの形を決めていますね。
もし猫型の人形焼きを作る場合、猫型という形は金型で決まっていますが、生地や中身は自由に変えられます。そのため一つの猫型で、同じ形でありながら、中身や味が異なる人形焼きをそれぞれ作れるのです。Javaでも同じように、一つのクラスから複数の異なるオブジェクトを作ることができます。
ぬいぐるみと型紙で例える
今度は、ぬいぐるみと型紙に例えてみます。
オブジェクト:ぬいぐるみ
クラス:型紙

型紙(クラス)からぬいぐるみ(オブジェクト)を作るとしましょう。
切り出す布の形や目のビーズを縫い付ける位置など、ぬいぐるみの特徴は型紙(クラス)によって決まりますが、布の柄や使うビーズ(属性の値)は自由に選べます。型紙に「マイクで入力された音声を、スピードを変えて再生する」という動作(機能・メソッド)を定義することもできます。
この型紙をもとにぬいぐるみを作れば、話しかけると反応する実体ができますね。マイクの録音時間や倍速のスピードは属性の値になります。そのため、この設計図一つでゆっくり話す個体や、とんでもない速さで話す個体も作れます。
Javaでクラスからオブジェクトを作ってみよう
ここまで、人形焼きと金型、ぬいぐるみと型紙を例にして、クラスとオブジェクトの関係を見てきました。では、実際のJavaでは、クラスをもとにどのようにオブジェクトを作るのでしょうか。先ほどの「ぬいぐるみと型紙」の例を、Javaのコードに置き換えて見てみましょう。
まずは、ぬいぐるみの設計図となるクラスを定義します。
class Nuigurumi {
String fabric;
String eyes;
double playbackSpeed;
void playVoice() {
System.out.println("音声を" + playbackSpeed + "倍速で再生します。");
}
}
この「Nuigurumiクラス」が、先ほどの例でいう「型紙」にあたります。ぬいぐるみの布地の色を表す「fabric」や、ぬいぐるみの目の色を表す「eyes」、音声の再生スピードを表す「playbackSpeed」を定義しています。また、「playVoice」は音声を再生する動作(メソッド)を表しています。
次に、mainメソッドの中で、このクラスをもとに実際のぬいぐるみを作ってみましょう。
Nuigurumi bear1 = new Nuigurumi(); bear1.fabric = "薄茶"; bear1.eyes = "緑"; bear1.playbackSpeed = 1.0; bear1.playVoice();
「new Nuigurumi()」によって、Nuigurumiクラスをもとにしたオブジェクトが作られます。つまり、型紙をもとに実際のぬいぐるみを作っているイメージです。
さらに、同じmainメソッドの中で、別のぬいぐるみを作ってみましょう。
Nuigurumi bear2 = new Nuigurumi(); bear2.fabric = "青"; bear2.eyes = "橙"; bear2.playbackSpeed = 2.0; bear2.playVoice();
同じNuigurumiクラスをもとにしていますが、bear1とbear2はそれぞれ別のオブジェクトです。同じ型紙を使っても、布地や目の色、音声の再生スピードを変えることで、異なる特徴を持ったぬいぐるみを作れるのと同じですね。
まとめ
オブジェクトとクラス、それぞれの役割はつかめてきたでしょうか。クラスはあくまでもオブジェクトを作るための設計図です。設計図だけでは実際のぬいぐるみを手に取ることができないように、クラスをもとにオブジェクトを作ることで、定義した属性やメソッドを具体的に利用できるようになります。
さらに「継承」や「ポリモーフィズム」といった概念が乗ってくるのですが、これはまたの機会に解説しようと思います。それでは!
《関連記事》


