Java是面向对象的语言,而面向对象编程主要体现了继承、封装、多态三个特性,那么什么是对象?
其实翻译已经做得很好了,只要理解了这个汉字——象。
《易·系辞》:在天成象。
【疏】謂懸象日月星辰也。
《易·系辞》:象也者,像此者也。
【疏】言象此物之形狀也。
什么是“象”?象,万物之形,万物之状,万物之况,万物之相也。
天地万事万物都是一个个存在,一个个实体,然而这个实体虽然存在,若是没有人能看到它,没有某个意识能够察觉到它,它便等于不存在,没有存在的意义,没有存在的价值。因此,象并不真正指那个实际存在,一切象形只不过是我们人类所看,所觉,所观测到的而已,而每个人所看到的都不会真正相同;一切都在变化中,没有真正永恒的实体;人绝难真正、彻底了解一个事物的本来面目,正如佛学所说:“色即是空,空即是色;色不亦空,空不亦色”,“一切有为法,如梦幻泡影,如露亦如电,应作如是观”。(这种哲学问题还可以参考量子学的观察者模式)
说的抽象了,哈,什么又是抽象呢?抽出某个存在的“象”,就是抽象了。象是概念,是人对事物的理解,是事物的特性集合,可以代表那个事物,虽然无法真正意义上的表述。所以,抽象,实际意思是获取某个事物的“象”的过程,由于这个过程不好理解,于是抽象还具有了难以理解,很陌生化的意思。
编程语言是计算机世界语言,相当于现实世界的规则,真正掌握了规则的人就可以成为造物主。当然,计算机世界也是我们真实世界的一部分;而计算机世界的造物主就是程序员了,造物主创造出来的一个个东西就可以描述为“对象”。同样,这也可以用其他词语称呼,不用执着,老子也说过:“道可道,非恒道也;名可名,非恒名也”,“吾不知其名,强谓之曰’道‘”,一切名相只是事物的描述,只要一描述就不是那个事物。
那么具体怎么“造物”?在不同的编程语言中有所不同。在java中,“造物”的过程就是实例化对象,具体的代码表现为:
new 类名();
于是问题又出来了,在编程语言中,什么是类?
类就是所要描述事物的各个属性、功能的集合。当然类作为一个存在,无论是概念上的存在,还是作为承载具体代码的文件的存在,还是其他的形式,这当然也是一种对象。
作为概念上的存在来说,类只不过是我们用编程语言描述某个事物的”象“的集合,是不真正具有实体的,不像一本书,一个椅子那样,而是人的意识划分出来的。
作为承载代码的存在,它便具有了”身体“,它的身体就是电脑上某个xxx.java或xxx.cpp这样的文件,”开膛破肚“后,可以看到”public xxx“等器官或细胞。
那么,代码造物的具体形式是什么样的?以Java语言来编写,选取现实世界不存在的一个人物——孙悟空,作为描述的对象。代码如下:
public class 孙悟空{
private String name;//名字
private double height;//身高,悟空的身高是可变的
private double weight;//体重,悟空的体重同样是可变的
private static final String racist = "灵明石猴"; //种族,悟空是灵明石猴,还在娘胎里就确定了。由于作者已经作古,于是不能更改了。改的是同人小说。
/**
*设置名字,菩提老祖取的
*/
public void setName(String name){
this.name = name;
}
/**
*获取名字
*/
public String getName(){
return name;
}
/**
*设置身高
*/
public void setHeight(double height){
this.height = height;
}
/**
*获得身高
*/
public double getHeight(){
return height;
}
/**
*设置体重
*/
public void setWeight(double weight){
this.weight = weight;
}
/**
*获取体重
*/
public double getWeight(){
return weight;
}
/**
*获取种族名称
*/
public String getRecist(){
return racist;
}
}
当《西游记》开播后:
public class 西游记 {
public static void main(String[] args) throws InterruptedException {
System.out.println("《西游记》开始了\n");
Thread.sleep(1000);
System.out.println("……女娲补天结束了...在花果山留下一块五彩石\n");
Thread.sleep(1000);
System.out.println("五彩石每天吸收日月精华...\n");
Thread.sleep(3000);//五彩石继续吸收中
System.out.println("过了n多万年,终于五彩石内孕仙胎...\n");
Thread.sleep(1000);
孙悟空 wuKong = new 孙悟空();//创建对象
wuKong.setHeight(1.6);//悟空大概1.6米高
wuKong.setWeight(70);//悟空大概70斤,虽然是石头
System.out.println("石破天惊,花果山天产石猴出世了,目射金光,直冲牛斗,玉帝命千里眼顺风耳查探……\n");
Thread.sleep(1000);
System.out.println("石猴种族:"+wuKong.getRecist());
System.out.println("千里眼顺风耳报告:石猴身高大概"+wuKong.getHeight());
System.out.println("石猴体重大概:"+wuKong.getWeight());
Thread.sleep(1000);
System.out.println("\n……石猴当上猴王,因感生老病死,出海遍寻真师……\n");
Thread.sleep(3000);//石猴继续寻找中...
System.out.println("过了数年……到了“灵台方寸山,斜月三星洞”……拜师菩提老祖\n");
wuKong.setName("孙悟空");
System.out.println("菩提老祖为石猴取名:"+wuKong.getName());
Thread.sleep(1000);
System.out.println("\n……悟空得授法术……");
Thread.sleep(1000);
System.out.println("悟空施展法天相地……\n");
wuKong.setHeight(999);
wuKong.setWeight(999);
Thread.sleep(1000);
System.out.println("于是悟空身高:"+wuKong.getHeight());
System.out.println("体重:"+wuKong.getWeight());
System.out.println("\n…………………………………………");
System.out.println("……取经大业开始……");
Thread.sleep(3000);
System.out.println("……功德圆满……");
System.out.println("--西游记完--");
}
}
运行效果:
《西游记》开始了
……女娲补天结束了…在花果山留下一块五彩石
五彩石每天吸收日月精华…
过了n多万年,终于五彩石内孕仙胎…
石破天惊,花果山天产石猴出世了,目射金光,直冲牛斗,玉帝命千里眼顺风耳查探……
石猴种族:灵明石猴
千里眼顺风耳报告:石猴身高大概1.6
石猴体重大概:70.0
……石猴当上猴王,因感生老病死,出海遍寻真师……
过了数年……到了“灵台方寸山,斜月三星洞”……拜师菩提老祖
菩提老祖为石猴取名:孙悟空
……悟空得授法术……
悟空施展法天相地……
于是悟空身高:999.0
体重:999.0
…………………………………………
……取经大业开始……
……功德圆满……
–西游记完–