什么是对象 对象为什么要被实例化

来源:互联网 发布:矩阵计算六讲 课后答案 编辑:程序博客网 时间:2024/05/22 16:42
什么是对象 对象为什么要被实例化

”一个类的实例” 和 ”一个类的对象" 是说的一个意思 
类好比一个模具,对象就是用这个模具造出来的具有相同属性和方法的具体事物,俗话说:“他俩真像,好像一个模子刻出来的”,就是指的这个意思。 
a instance of A 
这行语句是一个布尔表达式,即它的返回值是一个布尔值,即真或假, 
那么这句话是判断什么的真或者假呢?首先你要知道instance of是一个关键字,也就是这个词组在java源代码中具有特殊的含义的词语,这个词组的左边放一个对象,在这里是a,这个词组的右边放一个类,这里是A(注意java中区分大小写,a和A不是一个东西),所以 
a instance of A 
这条语句通俗的说就是:“a这个东西是否是A这个模具刻出来的”,用OOP(面向对象程序设计)的话来说就是:“对象a是否是A类的一个实例” 

你的问题如果要没有歧义的问就应该是:“对象a是否是类A的实例”,而不是“对象a是否是A的一个对象” 

再打个比方说一下类和对象吧:类就是你想象当中的若干个事物的一个种类,比如飞碟,但是如果你定义了一个飞碟类UFO以后,就有飞碟了吗?答案是,没有,因为它只是一个模具,当我们想象有飞碟这种东西时,我们还没有发现任何飞碟的实物。这就是类。 
假设有一天,天空真的出现了几个飞碟,从东边飞来了一个蓝色的盘状飞碟,比如代号叫b101;从西边飞来了一个红色的球状飞碟,代号叫r102;从南边飞来了一个绿色的条形飞碟,代号叫g103;那么我们就可以说:对象b101,a102,g103都是飞碟类的实例,所以表达式 
b101 instance of UFO 
的返回值就是真,在java中的表达就是true 
那么飞机,假设有一架飞机我们叫他空军一号aan1,则表达式 
aan1 instance of UFO 
的返回值就是假,在java中的表达就是false 

事实上instance of关键字是不建议使用的,因为它的使用一般意味着该软件的框架非常之巨大,其中包含的抽象类和借口巨多,导致有时需要进行这样的判断,一个设计得非常健壮,逻辑紧凑的软件是不应该有这样的表达式的。 

明白了吗? 

补充: 
你补充的这个问题,就是问equals函数的作用 
equals的英语意思就是等于,在这里作为一个函数的名称,同时这个函数只有对象才能调用,这里你还要知道引用和对象的区别。 
Student stu1 = new Student(); 
Student stu2 = stu1; 
Student stu3 = new Student(); 
问题:这里有几个类?几个对象?几个引用? 
答案是:一个类,两个对象,三个引用。 
不要以为stu1和stu2不是同一个东西,在这里,他们是同一个,所以stu1.equals(stu2)的值就是true(真),而stu1.equals(stu3)的值就是false 
注意需要与instance of区别,instance of是判断一个引用指向的对象是否是一个类的实例,而equals是判断一个引用和另一个引用是否是同一个对象。 
再用个通俗的例子给你说说吧: 
我有两个女同学,一个叫小芳,一个叫小雪,女同学是一个类,其中小芳也是我的女朋友,女朋友也是一个类,这个类继承自女同学类,那么就有 
class ClassMate{ //女同学类 

class GirlFriend extends ClassMate{//女朋友类 

class Demo{//测试类 
public void main(String[] args){ 
ClassMate xue = new ClassMate();//同学小雪 
GirlFriend fang = new GirlFriend();//女朋友小芳 
ClassMate fang2 = fang;//同学小芳 


则有 
(xue instance of ClassMate)==true//小雪是同学 
(fang instance of ClassMate)==true//小芳是同学 
(xue instance of GirlFriend)==false//小雪不是女朋友 
(fang instance of GirlFriend)==ture//小芳是女朋友 
----同时---- 
xue.equals(fang)==false//同学小雪不是女朋友小芳 
xue.equals(fang2)==false//同学小雪不是同学小芳 
fang.equals(fang2)=true//同学小芳就是女朋友小芳