類?對(duì)象?實(shí)例?

寫在前面##

時(shí)光匆匆,轉(zhuǎn)眼間發(fā)現(xiàn)已經(jīng)學(xué)習(xí)Java一年半了。從當(dāng)初懵懵懂懂的無知少年,到現(xiàn)在依然模棱兩可,可以看出Java雖然是一門高級(jí)的編程語言,想要學(xué)好Java并非易事。哈哈,好吧!還是我太渣了。廢話不多說,進(jìn)入 正題......


類?##

當(dāng)我在初學(xué)類的時(shí)候,我的老師是這樣告訴我們的:
現(xiàn)在有很多形狀不同的三角形,但是我們現(xiàn)在需要一個(gè)梯形(也可能是其它形狀),你會(huì)怎么辦?讓我們一起看下面那幅圖。

你會(huì)想到什么?

看過上面那幅圖,如果大家有學(xué)過C語言就會(huì)聯(lián)想到想到C語言中的結(jié)構(gòu)體。

在實(shí)際問題中,一組數(shù)據(jù)往往具有不同的數(shù)據(jù)類型。例如,在學(xué)生信息登記表中,姓名應(yīng)為字符型;學(xué)號(hào)可為整型或字符型;年齡應(yīng)為整型;性別應(yīng)為字符型;成績可為整型或?qū)嵭?。顯然不能用一個(gè)數(shù)組來存放這一組數(shù)據(jù)。因?yàn)閿?shù)組中各元素的類型和長度都必須一致,以便于編譯系統(tǒng)處理。為了解決這個(gè)問題,C語言中給出了另一種構(gòu)造數(shù)據(jù)類型——“結(jié)構(gòu)(structure)”或叫“結(jié)構(gòu)體”。 它相當(dāng)于其它高級(jí)語言中的記錄?!敖Y(jié)構(gòu)”是一種構(gòu)造類型,它是由若干“成員”組成的。每一個(gè)成員可以是一個(gè)基本數(shù)據(jù)類型或者又是一個(gè)構(gòu)造類型。結(jié)構(gòu)既是一種“構(gòu)造”而成的數(shù)據(jù)類型,那么在說明和使用之前必須先定義它,也就是構(gòu)造它。如同在說明和調(diào)用函數(shù)之前要先定義函數(shù)一樣。讓編程序的人自定義一個(gè)數(shù)據(jù)類型。

其實(shí)這里就解決了這樣一個(gè)問題:如何用已有的數(shù)據(jù)類型(基本數(shù)據(jù)類型)來表示我們所需要的數(shù)據(jù)類型?

幾乎任何一門語言是有一定共通性的,我們Java中要是想表示一些不存在的數(shù)據(jù)類型怎么辦?這時(shí)就出現(xiàn)了的概念。

類是一種復(fù)雜的數(shù)據(jù)類型,它是將不同類型的數(shù)據(jù)與這些數(shù)據(jù)相關(guān)的操作封裝在一起的集合體,這有點(diǎn)像C語言中的結(jié)構(gòu)體,唯一不同的就是結(jié)構(gòu)體沒有定義所說的“數(shù)據(jù)相關(guān)的操作”,“數(shù)據(jù)相關(guān)的操作”就是我們平常經(jīng)??吹降摹胺椒ā薄R虼祟惥哂懈叩某橄笮?,類中的數(shù)據(jù)還有隱藏性和封裝性。
類的結(jié)構(gòu)(也即類的組成)是用來確定一類對(duì)象的行為的,而這些行為是通過類的內(nèi)部數(shù)據(jù)結(jié)構(gòu)和相關(guān)操作來確定的。這些行為是通過一種操作接口來描述的(也就是我們平時(shí)看到的類的成員函數(shù)),使用者只關(guān)心的是接口的功能(也就是我們只關(guān)心類的各個(gè)成員函數(shù)的功能),對(duì)它是如何實(shí)現(xiàn)的并不感興趣。而操作接口也被稱為這類對(duì)象向其它對(duì)象提供的服務(wù)。

是不是看概念可暈?這樣說吧,“類”就是“類型”的同義詞。


我們世界上有很多人,但是他們(對(duì)了還包括你和我哦)都屬于“人類”這一類型。我們都有相同的地方:我們都有眼、鼻子、腳、手等一些共同的特性,也有吃、喝、玩等一些行為。我們把這些特性和行為抽象出來就形成了我們所說的人類這個(gè)“類”。

一句話說完就是

類是一群對(duì)象的集合,里面包含了N多的對(duì)象。而對(duì)象只是類的一個(gè)特例。


對(duì)象##

談到對(duì)象我們就會(huì)自然而然地想到那句耳熟能詳?shù)囊痪湓挘?/p>

萬物皆對(duì)象

對(duì)象-對(duì)象具有狀態(tài)和行為。例如:狗有狀態(tài) - 顏色,名稱,繁殖以及行為,搖頭晃腦,吠叫,吃。對(duì)象是類的實(shí)例。

就比如說“安貝貝”是一條狗,它只是狗中的一個(gè)特例(它和其它狗不一樣,它的毛色、體重、長度、等一些屬性確定了它在狗中是唯一的),因此我們就把它叫做一個(gè)具體的對(duì)象。
當(dāng)然我們也可以通過“安貝貝”這個(gè)對(duì)象抽象出“狗”這個(gè)類。


實(shí)例##

馬上就要過中秋節(jié)了(溫馨提示:今年中秋節(jié)在9月15日),那么我們就拿月餅說事兒。

口水已落下

現(xiàn)在我們這里的實(shí)例就是圖中的那個(gè)月餅(下面我們用"mc"代稱),比如我們有個(gè) mooncake 這個(gè)類。我們要對(duì)它進(jìn)行實(shí)例化---》 mooncake mc=new mooncake();這里的mc(月餅)就是一個(gè)實(shí)例,或者說“mc”就是“月餅類”中的一個(gè)對(duì)象。new是在堆中為對(duì)象“mc”申請(qǐng)了一塊空間。其中new也實(shí)際上是在調(diào)用了“mooncake類”的構(gòu)造方法。

new的作用

1.創(chuàng)建對(duì)象,實(shí)例化對(duì)象
2.實(shí)例化對(duì)象,賦予對(duì)象空間,即堆內(nèi)存地址
3.調(diào)用構(gòu)造函數(shù)

其實(shí)這里對(duì)象的實(shí)例化就是把所有的材料放到模具中做出成品的這個(gè)過程。這里的類就相當(dāng)于這個(gè)模具,只有當(dāng)實(shí)例化之后,我們才可以看到這個(gè)讓我們口水直流的對(duì)象(即月餅mc)。

new出來的“東東”可以叫對(duì)象也可以叫實(shí)例,類和對(duì)象在這個(gè)角度上是等價(jià)的。


小結(jié)##

說了這么多,總結(jié)為一句話:每個(gè)對(duì)象都是某個(gè)(class)的一個(gè)實(shí)例(instance).

以上是我在Java學(xué)習(xí)中的一點(diǎn)薄見,望各位大神指點(diǎn)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容