Java面向?qū)ο笾阅軌虺蔀橹髁鳎鞘且驗(yàn)槿肆?xí)慣以對(duì)象的方式認(rèn)識(shí)現(xiàn)實(shí)世界,例如我說(shuō):老虎。那你大腦中馬上呈現(xiàn)出一個(gè)老虎的樣子,對(duì)吧。
軟件存在的意義就是為了解決現(xiàn)實(shí)世界當(dāng)中的問(wèn)題,它必然模擬現(xiàn)實(shí)世界,也就是說(shuō)現(xiàn)實(shí)世界中有什么,軟件中就對(duì)應(yīng)有什么。
Java面向?qū)ο缶幊趟枷胫嘘P(guān)注點(diǎn)是“對(duì)象”或者“事物”,那么在編程語(yǔ)言當(dāng)中要想創(chuàng)建對(duì)象則必須先有類,那么類和對(duì)象分別是什么,它們的區(qū)別和聯(lián)系是什么呢?
類是現(xiàn)實(shí)世界當(dāng)中具有共同特征的事物進(jìn)行抽象形成的模板或概念。而對(duì)象是實(shí)際存在的個(gè)體。例如:“汽車”就是一個(gè)類(所有的汽車都有方向盤(pán)、發(fā)動(dòng)機(jī)、都能形式,這是它們的共同特征),“你家的那個(gè)汽車”就是一個(gè)真實(shí)存在的對(duì)象。或者說(shuō)“明星”是一個(gè)類,“劉德華”就是一個(gè)對(duì)象。“沈騰”、“趙本山”、“宋丹丹”都是實(shí)際存在的對(duì)象,他們都屬于“笑星”類,類描述事物的共同特征,那么“笑星”類都有哪些共同特征呢?笑星類都有姓名、性別、年齡等狀態(tài)信息(屬性),他們還有一個(gè)共同的行為就是“演出”(方法)。但當(dāng)具體到某個(gè)對(duì)象上之后,我們發(fā)現(xiàn)姓名是不同的,性別是不同的,年齡也是不同的,演出的效果也是不同的。所以我們?cè)谠L問(wèn)姓名、性別、年齡的時(shí)候,必須先有笑星對(duì)象,通過(guò)真實(shí)存在的笑星對(duì)象去訪問(wèn)他的屬性,包括“演出”的時(shí)候,只有“笑星”類是不行的,必須先有笑星對(duì)象,讓笑星對(duì)象去執(zhí)行“演出”這個(gè)動(dòng)作。
通過(guò)類可以創(chuàng)建對(duì)象,對(duì)象又被稱為實(shí)例(instance),這個(gè)過(guò)程也可以稱為實(shí)例化。對(duì)象1、2、3具有共同特征,進(jìn)行抽象形成了類,所以從對(duì)象到類稱為抽象。如下圖所示:
圖8-1:類和對(duì)象
通過(guò)以上的描述,我們得知:類 = 屬性 + 方法,而屬性描述的是狀態(tài),方法描述的是行為動(dòng)作。行為動(dòng)作以方法的形式存在,那屬性以什么形式存在呢?例如:姓名、性別、年齡,大家想起之前學(xué)習(xí)的變量了嗎?變量用來(lái)存儲(chǔ)數(shù)據(jù)。不錯(cuò),對(duì)象的屬性以變量形式存在,并且這里所說(shuō)的變量是我們之前提過(guò)的“成員變量當(dāng)中的實(shí)例變量”。為什么是實(shí)例變量呢,實(shí)例變量就是對(duì)象級(jí)別的變量,這樣的變量要求必須先存在對(duì)象,通過(guò)對(duì)象才能訪問(wèn)。例如:“中國(guó)人”這個(gè)類,有一個(gè)屬性是“身份證號(hào)”,每一個(gè)中國(guó)人的“身份證號(hào)”都是不一樣的,所以身份證號(hào)必須使用一個(gè)真實(shí)存在的“中國(guó)人對(duì)象”來(lái)訪問(wèn)。不能使用“中國(guó)人”這個(gè)類去訪問(wèn)身份證號(hào)。一個(gè)類可以實(shí)例化N多個(gè)對(duì)象,假設(shè)通過(guò)“中國(guó)人”這個(gè)類創(chuàng)建了100個(gè)“中國(guó)人對(duì)象”,那么“身份證號(hào)”必然會(huì)有100個(gè)實(shí)例變量空間去存儲(chǔ)。