可能性のある複製:
オブジェクトとインスタンスの違い
いくつか質問があります。
上記の概念がC#に関連しているので、誰かが私に上記の概念をよりよく理解するのを手伝ってくれませんか?
オブジェクトはクラスのインスタンスです。
クラスはオブジェクトの定義です。インスタンス化されるまで、実際にはオブジェクトにはなりません。抽象クラスはインスタンス化できないため、そのタイプのオブジェクトは作成できません。オブジェクトを作成するには、サブクラスを定義する必要があります。
はい、クラスのすべてのインスタンスはオブジェクトです。
クラスは(抽象かどうかにかかわらず)オブジェクトではありません。タイプです。
クラスとオブジェクトの概念の違いは何であるかをより明確に示すための1つの一般的な類似があります。
クラスはレシピのようなものです。オブジェクトはケーキです。 1つのレシピから多くのケーキを作ることができます。レシピに含めることができるのはヒントのみ(抽象的)であり、独自のレシピ(実装クラス)を作成するためのスペースを残して、そこからケーキ(オブジェクト)を作成できます。
したがって、クラスはオブジェクトではなく、そのクラスのオブジェクトがどのように見えるかの記述です。抽象クラスには、この抽象クラスから派生したクラスの実装に役立つメソッドやその他の情報が含まれています。抽象クラスからオブジェクトを作成/インスタンス化することはできません(その定義が完全ではないため)。
class Cat {} // It is a cat. Just a cat. Class is a general issue.
myCat = new Cat("red", "5kg", "likes milk", "3 years old"); // It is my cat. It is an object. It is really a cat.
yourCat = new Cat("gary", "3kg", "likes a meal", "5 years old"); // It is your cat. Another cat. Not my cat. It is really a cat too. It is an object;
abstract class Animal {} // Abstract class
animal = new Animal(); // It is not correct. What is 'animal'? Cat, dog, cow? I don't know.
class Dog : Animal {} // It is a class. It is a dog in general.
someDog = new Dog("brown", "10 kg", "likes cats"); // It is really a dog. It is an object.
抽象クラスをインスタンス化することはできません(したがって、オブジェクトになることはありません)。抽象基本クラスから継承するクラスを作成し、インスタンス化すると、抽象クラスのプロパティと独自のプロパティが含まれます。抽象基本クラスの作成の背後にある目的は、特定の機能を実装するために派生クラスを「強制」することです(インターフェースに似ていますが、完全ではありません)。
クラスのすべてのインスタンス(抽象クラスを除く)はオブジェクトですか?
はい。それが「インスタンス」の定義です。
抽象クラスはインスタンス化できないため、オブジェクトではありませんか?
クラスはインスタンスやオブジェクトと同じではありません。オブジェクトはクラスのインスタンスです。動物園のシミュレーションを想像してみてください。オブジェクトは特定のライオンのようなものですが、クラスはライオンとは何かの説明のようなものです。抽象クラスは、あいまいすぎてその説明だけに基づいて何かを構築することが合理的ではないものの説明です(たとえば、「動物」)。そのため、それらをインスタンス化することはできません。動物のようなものは、プログラムが直接要求するには曖昧すぎる可能性があります。代わりに、プログラムはライオン、タイガー、マングースなどのより具体的なもののみを要求します。