Javaにおけるオブジェクトとクラスの違いは何ですか?
オブジェクトはクラスのインスタンスです
「オブジェクト」という用語は、実際のインスタンスを指します。すべてのオブジェクトはクラスに属さなければなりません。オブジェクトは作成され、最終的に破棄されるため、プログラム内での寿命は限られています。オブジェクトが「生きている」間、そのプロパティは大きく変更される可能性もあります。
以下の例で、私たちの言っていることを明確にしましょう。「Animal」というクラスがあると仮定しましょう。すべての動物は体と脳を持っており、これらは私たちの架空のAnimalクラスの属性である可能性があります。また、すべての動物が動けるので、「movement」のようなメソッドも追加できます(もちろん、もっと良い例を思いつくかもしれませんが、ポイントは理解できたと思います)。つまり、あなたが自分の頭の中でしっかりと理解すべきことは、この非常に一般的な「Animal」のテンプレートは変わらないということです。これは単なるコードの行であり、Animalクラスを定義するものです。
Animalクラスのインスタンスは、特定の動物、例えばライオン、猫、またはシマウマです。これらのAnimalクラスのインスタンスはオブジェクトと呼ばれます。Animalクラスは一般的な概念であり、そのインスタンスであるライオンや猫などは、その一般的な概念を基にして、実際のインスタンスを作り出します。
だからこそ、プログラマーはクラスに対してコンストラクタを定義します。クラスのオブジェクトを作成したいときに、実際にそのオブジェクトに持たせたい属性(動物の種類、名前、体重など)を渡すだけで済むようにするためです。コンストラクタはクラスを「生き返らせる」ものだと考えることができます。だからこそコンストラクタはそのインスタンスを「構築する」ため、構築者(constructor)と呼ばれるのです。
オブジェクトには寿命がありますが、クラスには寿命がありません
私たちのAnimalの例が示すように、すべてのオブジェクトには寿命が関連しています。猫やシマウマは永遠に生きることはできません。そして、それらのオブジェクトの属性も「生きている」間に変更される可能性があります。例えば、クラス内で定義された「size」変数がある場合、猫のオブジェクトが大きくなるにつれてその値は変わります。
オブジェクトとクラスのまとめ
つまり、クラスは一般的な概念(動物のようなもの)であり、オブジェクトはそのクラスの非常に具体的な具現化で、限られた寿命を持っているもの(ライオン、猫、シマウマのようなもの)であると言えます。クラスとオブジェクトの違いを考えるもう一つの方法は、クラスが何かもっと具体的なもののテンプレートを提供し、プログラマーがそのクラスのオブジェクトを作成するときにその具体的なものを定義するということです。