类这个词来自于
分类(
将某物归入的一种类别)。我们都听说过,一个
类就像蓝图,但这到底是什么意思呢?这意味着
类包含特定类别的描述(
我想用Java举例说明Class、Object和Instance之间的区别,并请求读者在阅读时将其视为故事,如果您不熟悉Java也没关系。)那么,让我们从创建一个
HumanBeing的
类别开始,Java程序如下所示:
class HumanBeing{
}
现在一个 人类 通常具有哪些属性,比如名字、年龄、身高、体重。现在让我们将其限定在这四种属性中,并将其添加到我们的类别中。
class HumanBeing{
private String Name;
private int Age;
private float Height;
private float Weight;
}
现在每个类别都有一个行为,例如类别Dog有吠叫、抓取、滚动等行为...同样地,我们的类别HumanBeing也可以有某些行为,例如当我们问我们的HumanBeing姓名/年龄/体重/身高时,它应该给我们它的姓名/年龄/体重/身高,所以在Java中我们这样做:
class HumanBeing{
private String Name;
private int Age;
private float Height;
private float Weight;
public HumanBeing(String Name,int Age,float Height,float Weight){
this.Name = Name;
this.Age = Age;
this.Height = Height;
this.Weight = Weight;
}
public String getName(){
return this.Name;
}
public int getAge(){
return this.age;
}
public float getHeight(){
return this.Height;
}
public float getWeight(){
return this.Weight;
}
}
现在我们已经给我们的类别HumanBeing添加了行为,因此我们可以询问其姓名、年龄、身高、体重,但你要向谁询问这些细节呢?因为class HumanBeing
只是一个类别,它是一个蓝图,例如建筑师在纸上制作建筑物的蓝图,现在我们不能在蓝图中生活(它是建筑物的描述),只有建成后才能住在建筑物里。
因此,在这里我们需要从上面描述的类别中制作一个人类,那么我们该如何在Java中实现呢?
class Birth{
public static void main(String [] args){
HumanBeing firstHuman = new HumanBeing("Adam",25,6.2,90);
}
}
在上面的例子中,我们创建了一个名为姓名、年龄、身高、体重的人类,那么在上面的代码中到底发生了什么呢? 我们实例化了我们的类别HumanBeing,也就是创建了我们类的一个对象。
注意:Object和Instance不是同义词有时候看起来Object和Instance好像是同义词,但它们并不是。我会给出两种情况
情况1:对象和实例似乎是同义词
让我详细解释一下,当我们说HumanBeing firstHuman = new HumanBeing("Adam",25,6.2,90);
时,我们在堆内存中创建了我们类别的一个对象,并分配了一些地址给它,而firstHuman
持有该地址的引用,现在这个对象是HumanBeing的一个对象,也是HumanBeing的一个实例。
在这里,似乎对象和实例是同义词,我会重复一遍,它们不是同义词
让我们继续我们的故事,我们创建了我们的第一个人类,现在我们可以问他的名字、年龄、身高、体重,这是在Java中实现方法。
class Birth{
public static void main(String [] args){
HumanBeing firstHuman = new HumanBeing("Adam",25,6.2,90);
System.out.println(firstHuman.getName());
System.out.println(firstHuman.getAge());
...
...
}
}
所以我们首先有了人类,然后逐步赋予他一些资质,让他成为医生,因此我们需要一个名为Doctor的类别,并给我们的医生一些行为,因此在Java中我们可以这样做:
class Doctor extends HumanBeing{
public Doctor(String Name,int Age,float Height,float Weight){
super(Name,Age,Height,Weight);
}
public void doOperation(){
}
public void doConsultation(){
}
}
在这里,我们使用了继承的概念,它为代码带来了一些可重用性,每个医生首先都是一个人类,所以医生将从人类那里继承姓名、年龄、体重、身高,而不是重新编写代码。请注意,我们只是描述了医生,还没有创建一个医生,所以让我们在Birth类
中创建一个医生。
class Birth{
public static void main(String [] args){
Doctor firstDoctor = new Doctor("Strange",40,6,80);
.......
.......
.......
.......
}
}
情况2:对象和实例不是同义词
在上面的代码中,我们可以看到我们正在实例化我们的 Doctor 类别并将其带到生活中,即我们只是创建Doctor类别的对象,因为我们已经知道对象是在堆内存上创建的,而 firstDoctor 保存了一个对堆上该对象的引用;
这个特定的对象 firstDoctor
如下所示(请注意,firstDoctor 保存了一个对对象的引用,它不是对象本身)
firstDoctor
是 Doctor
类的一个对象 和 Doctor
类的一个实例
firstDoctor
不是 HumanBeing
类的一个对象,但是是 HumanBeing
类的一个实例
因此,一个特定的对象可以是某个类的实例,但不一定是该给定类的对象
结论:
如果一个对象满足该特定类别的所有特点,则称该对象是该特定类别的一个实例。
现实世界的例子如下,我们首先作为人类出生,所以把我们想象成人类的对象,现在当我们长大并承担责任、学习新技能和扮演不同的角色时,例如儿子、兄弟、女儿、父亲、母亲,我们到底是什么呢?我们可以说我们是人类的对象,但是是兄弟、女儿等的实例。
希望这有所帮助
谢谢