对象是类的一个实例。
类是对象的定义。只有在实例化后,它才变成一个对象。由于抽象类无法实例化,因此不能创建该类型的任何对象。需要定义子类才能创建对象。
是的, 每个类的实例都是一个对象。
类(无论是抽象还是非抽象)都不是对象。它们是类型。
有一个通用的比喻可以更清楚地展示类和对象的概念区别。
类就像食谱,而对象则是蛋糕。通过一个食谱我们可以做出许多个蛋糕。食谱只能提供提示(即抽象),为你自己创造的食谱(即实现类)留下一些空间,然后你可以从这些食谱中制作出蛋糕(即对象)。
因此,类不是对象,它描述了该类对象的外观。抽象类包含对实现派生自此抽象类的类有用的方法和其他信息。无法从抽象类创建/实例化对象(因为其定义不完整)。
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.
抽象类不能被实例化(因此也不能成为一个对象)。如果您创建了从抽象基类继承的类,并对其进行实例化,它将具有抽象类的属性以及自己的属性。创建抽象基类的目的是“强制”派生类实现某些功能(类似于接口,但不完全相同)。
每个类的实例(抽象类除外)都是一个对象?
是的。这就是“实例”的定义。
抽象类不能被实例化,因此它们不是对象?
类不同于实例或对象。对象是类的一个实例。想象一下动物园模拟。对象就像是一个特定的狮子,而类更像是对狮子的描述。抽象类是描述那些过于模糊,仅凭描述无法合理构建的事物(例如“动物”)。这就是为什么你无法实例化它们的原因。像动物这样的东西可能过于模糊,程序无法直接请求;相反,程序只会请求更具体的东西,如狮子、老虎或猫鼬。