2.深入探討面向?qū)ο螅?/STRONG>
2.1“類(lèi)型”的內(nèi)部細(xì)節(jié):
有了上面的知識(shí),我們現(xiàn)在就可以深入的挖掘類(lèi)的內(nèi)部實(shí)現(xiàn)了。所有的知識(shí)點(diǎn)我都會(huì)圍繞著類(lèi)與對(duì)象展開(kāi),在此之前,我希望你能夠確信對(duì)以上所介紹的基本內(nèi)容已完全掌握了!
是的,面向?qū)ο蟮木幊陶Z(yǔ)言最大的特色就是可以編寫(xiě)自己所需的數(shù)據(jù)類(lèi)型,以更好的解決問(wèn)題。我想我必須要幫你搞清楚“類(lèi),對(duì)象,屬性,方法它們之間的關(guān)系”!就像我前面所說(shuō)的,人這個(gè)“類(lèi)”是什么也做不了的,因?yàn)椤叭祟?lèi)”只是一個(gè)抽象的概念,它不是實(shí)實(shí)在在的“東西”,而這個(gè)“東西”就是所謂的對(duì)象。只有人這個(gè)“對(duì)象”才能去工作。而類(lèi)呢?類(lèi)是對(duì)象的描述!對(duì)象從類(lèi)中產(chǎn)生出來(lái)!此時(shí),對(duì)象具有類(lèi)所描述的所有的屬性以及方法。-------一定要理解這句話(huà)。!
也許你已經(jīng)有些不知所措了,沒(méi)關(guān)系!好好的回味一下,我再舉個(gè)例子!例如電視機(jī),電視機(jī)都有工作原理圖,那么什么叫電視機(jī)呢?只要它能夠?qū)崿F(xiàn)工作原理圖的所有功能的物體,我們都叫它電視機(jī)。你想想是不是這么一回事兒?可是,電視機(jī)原理圖是不能工作的,也就是這個(gè)原理圖不能收看節(jié)目,只有電視機(jī)這個(gè)“實(shí)體——即所謂的對(duì)象”才能收看節(jié)目,也就是說(shuō),從類(lèi)生成出對(duì)象之后才算得上是真正的有意義!才能開(kāi)始工作。此時(shí),電視機(jī)擁有電視原理圖所描述的所有的屬性及方法!明白了吧,呵呵!
我先前介紹過(guò),類(lèi)是屬性與方法的集合。而這些屬性與方法可以被聲明為私有的(private),公共的(public)或是受保護(hù)(protected)的,他們描述了對(duì)類(lèi)成員的訪(fǎng)問(wèn)控制。下面我分別做一下介紹:
1. 公共的(public):把變量聲明為公共類(lèi)型的之后,那么就可以通過(guò)對(duì)象來(lái)直接訪(fǎng)問(wèn),一切都是暴露無(wú)遺的!也就是說(shuō),你的信用卡密碼別人也能夠直接得到。
2. 私有的(private):如果把變量聲明為私有的情況就好多了,想要得到我的信用卡密碼,對(duì)象必須要調(diào)用專(zhuān)用的方法才能夠得到。
3. 受保護(hù)的(protected):介紹繼承時(shí)再討論。
4. 默認(rèn)控制訪(fǎng)問(wèn)符(friendly)://JAVA中有而C++中沒(méi)有。
為了實(shí)現(xiàn)數(shù)據(jù)的封裝,提高數(shù)據(jù)的安全性,我們一般會(huì)把類(lèi)的屬性聲明為私有的,而把類(lèi)的方法聲明為公共的。這樣,對(duì)象能夠直接調(diào)用類(lèi)中定義的所有方法,當(dāng)對(duì)象想要修改或得到自己的屬性的時(shí)候就必須要調(diào)用以定義好的專(zhuān)用的方法才能夠?qū)崿F(xiàn)。你想想,你會(huì)把你的信用卡密碼公布出來(lái)嘛?呵呵!所以,我們提倡的是:“對(duì)象調(diào)方法,方法改屬性”;
2.2通過(guò)實(shí)例看內(nèi)存分配:
說(shuō)了這么多,讓我們來(lái)看一個(gè)實(shí)例吧!比如:現(xiàn)在我們要編寫(xiě)某家公司員工管理系統(tǒng),你認(rèn)為最合適的數(shù)據(jù)類(lèi)型是什么?我認(rèn)為是員工個(gè)人!但是在面向過(guò)程的語(yǔ)言中,這樣做是不允許的,因?yàn)樗荒苁褂谜Z(yǔ)言中的內(nèi)部數(shù)據(jù)類(lèi)型!而員工不在這個(gè)內(nèi)部數(shù)據(jù)類(lèi)型之內(nèi)!也許有人會(huì)說(shuō)可以用C語(yǔ)言中的struct,好注意!畢竟它是類(lèi)的基礎(chǔ)!如果你以前是一名面C或B的程序員,請(qǐng)你忘掉這些,讓我們一起看看如何用類(lèi)來(lái)實(shí)現(xiàn)這一切吧!
某家公司的員工是人類(lèi)的一個(gè)特殊群體,它除了具備人類(lèi)的所有特性與方法外,它還有額外的特性與方法,比如她有她的工資、信用卡密碼、作息時(shí)間等等,這些特性以及工作內(nèi)容,工作量等等這些方法。而在計(jì)算機(jī)中我們?cè)撊绾味x這個(gè)類(lèi)呢?下面我將寫(xiě)出它的格式,讓你看看在計(jì)算機(jī)中它是張什么樣子的!
/*在此我需要再次聲明的是,我用的是JAVA格式,在語(yǔ)法格式上它與C++大不相同!許多細(xì)節(jié)以及內(nèi)部操作都有諸多區(qū)別,而在思想上確實(shí)大同小異的*/
//employee.java
public class employee{
private String name; //員工姓名
private int age; //員工年齡
private char sex; //員工性別
private float emolument; //員工薪水
private boolean lunch; //員工午餐
//……等等
public void heater(){ //這個(gè)方法是用來(lái)加工員工的午餐
lunch = true;
}
public void setName(String a){ //這個(gè)方法是修改員工的姓名
name= a;
}
public String getName(){ //這個(gè)方法是得到員工的姓名
return name;
}
//……等等
}
這樣我們就定義完了我們所需要的數(shù)據(jù)類(lèi)型,F(xiàn)在,讓我們來(lái)看看它能夠干什么以及怎么工作!
我想要做的是,工作室里有一個(gè)光桿司令叫“jingwei”,我修改它的名字后對(duì)對(duì)它進(jìn)行輸出,看看我是怎么做的吧!
注意:請(qǐng)仔細(xì)觀察對(duì)象是如何調(diào)用方法的,它使用了“.”操作符!事實(shí)上是這樣的,對(duì)象調(diào)用公共的屬性或方法時(shí)就會(huì)使用“.”操作符。
然而在C++中,如果定義一個(gè)同類(lèi)型的指針,該指針調(diào)用此對(duì)象的方法時(shí),就會(huì)使用“->”操作符。更詳細(xì)的內(nèi)容清參閱相關(guān)書(shū)籍了!
//workstation.java
import java.awt.Graphics;
import java.applet.Applet;
public class workstation extends Applet{
private employee jingwei ; //對(duì)象的聲明,此時(shí)并不分配內(nèi)存!
public void init(){
jingwei = new employee(); /*此時(shí)創(chuàng)建對(duì)象會(huì)調(diào)用構(gòu)造函數(shù),稍候介紹*/
jingwei.setName(“jw”); //設(shè)置我的名字
}
public void paint(Graphics g){
g.drawString("my age is "+jingwei.getName(),10,10);//顯示我的年齡
}
}
輸出結(jié)果是:
my name is jw
這串字符串是在輸出窗口的x坐標(biāo)軸為10 px , y坐標(biāo)軸為10 px的位置。
我現(xiàn)在要做的是,把上面的程序做個(gè)大解剖,讓你能夠看清楚它到底是怎么一回事兒。ㄎ铱刹粫r(shí)帶你去看里面的匯編,呵呵,那個(gè)我也不會(huì):)
出處:相關(guān)論壇
責(zé)任編輯:冰點(diǎn)的冰藍(lán)色
上一頁(yè) 內(nèi)置數(shù)據(jù)類(lèi)型與函數(shù) 下一頁(yè) 一起來(lái)看看workstation這個(gè)類(lèi)
◎進(jìn)入論壇網(wǎng)絡(luò)編程版塊參加討論
|