類與對象的基本概念演示文稿_第1頁
類與對象的基本概念演示文稿_第2頁
類與對象的基本概念演示文稿_第3頁
類與對象的基本概念演示文稿_第4頁
類與對象的基本概念演示文稿_第5頁
已閱讀5頁,還剩100頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、類與對象的基本概念演示文稿第一頁,共一百零五頁。(優(yōu)選)類與對象的基本概念第二頁,共一百零五頁。2.1 編程語言的幾個發(fā)展階段1、機器語言如:匯編語言面向機器的語言,低級語言,是計算機處理信息的早期語言特點:程序中的指令都是由0,1組成的序列,稱為“機器指令”優(yōu)點:深入理解CPU、寄存器等硬件系統(tǒng)原理單片機等硬件系統(tǒng)編程第三頁,共一百零五頁。2、過程語言如:C語言、Fortran語言面向過程的語言,高級語言,接近人的“自然語言”特點:程序通常由若干“塊”(過程/函數(shù))組成,每個塊負責(zé)完成獨立的功能第四頁,共一百零五頁。采用面向過程的編程思想:程序=算法+數(shù)據(jù)優(yōu)點:流程清晰執(zhí)行效率比面向?qū)ο蟪绦?/p>

2、高適于編寫數(shù)據(jù)處理類程序及較小程序,如:算法。缺點:處理復(fù)雜問題時,邏輯混亂可維護性較差第五頁,共一百零五頁。3、面向?qū)ο笳Z言如:Java語言、C+語言高級語言,更加符合人的思維模式特點:封裝繼承多態(tài)第六頁,共一百零五頁。采用面向?qū)ο蟮木幊趟枷耄骸耙磺卸际菍ο蟆背绦?= 對象 + 消息優(yōu)點:高可維護性、可擴展性、可復(fù)用性、健壯性適于編寫復(fù)雜的、較大的程序缺點:執(zhí)行效率較低第七頁,共一百零五頁。封裝將數(shù)據(jù)和對數(shù)據(jù)的操作封裝在一個對象中,并且對對象的使用者隱藏數(shù)據(jù)的實現(xiàn)過程例如:卡車、公共汽車、轎車等可以抽象出其共性:屬性:可乘人數(shù)、運行速度、功率、油耗、自重、輪子數(shù)目行為(功能):加速、減速、剎

3、車、轉(zhuǎn)彎面向?qū)ο缶幊倘齻€特性第八頁,共一百零五頁。將這些特性封裝在一起,用類描述class car int number; double speed; int power;double oilwear;double weight;int wheel; public void speedup(double speed) public void speeddown(double speed)public void brake()第九頁,共一百零五頁。繼承通過抽象,抽取出某一類的多個對象的共同特性,形成“類”子類可以繼承父類的屬性及功能,并能夠擴展例如:自行車、校車都屬于“車”這一類型,并且具有共同

4、的屬性“時速”,可抽象出“車”作為父類第十頁,共一百零五頁。class 車double 時速class 校車class 自行車class 轎車/自動繼承了“時速”屬性校車() 時速 = 90;/還能擴展屬性和功能boolean 有空調(diào);void 放音樂()第十一頁,共一百零五頁。多態(tài)方法的多態(tài):多個操作(方法)可具有相同的名字,但方法接收的參數(shù)必須不同;繼承的多態(tài):同一個操作被不同類型對象調(diào)用時,可產(chǎn)生不同的行為。對象的上轉(zhuǎn)型對象第十二頁,共一百零五頁。示例:方法的多態(tài)class 校車校車() 時速 = 90;校車(天氣 wea) if (wea = 天氣.雨天) 時速 = 70; else

5、if (wea = 天氣.雪天) 時速 = 120;校車(司機 who, 天氣 wea) if (who = 司機.張師傅 & wea = 天氣.雨天) 時速 = 120; else if 第十三頁,共一百零五頁。示例:繼承的多態(tài)class 車double cost () return 0;class 校車double cost () return 65;class 自行車double cost () return 650;車 car = new 車();double cost = car.cost();/cost的值為 0車 car = new 校車();double cost = car.

6、cost();/cost的值為 65車 car = new 自行車();double cost = car.cost();/cost的值為 650第十四頁,共一百零五頁。2.2 類什么是類?類是組成Java程序的基本要素;類封裝了一類對象的屬性和方法;類是用來定義對象的模板。類的實現(xiàn)包括兩部分:類聲明類體第十五頁,共一百零五頁。1、類的聲明class People 類的聲明People為類名第十六頁,共一百零五頁。2、類體class People 類體:大括號及其包含內(nèi)容類體的內(nèi)容:大括號之間內(nèi)容第十七頁,共一百零五頁。聲明形式public abstract | final class 類名稱

7、 extends 父類名稱 implements 接口名稱列表 成員變量聲明及初始化; 成員方法聲明及方法體;思考:類聲明的作用,需要定義哪些內(nèi)容,需要明確哪些限制,有無現(xiàn)有代碼可以復(fù)用?第十八頁,共一百零五頁。類體的內(nèi)容由兩部分構(gòu)成:變量定義:用來刻畫屬性;方法定義:用來刻畫功能。例如:class 梯形 float 上底,下底,高,area; /變量定義部分 float 計算面積() /方法定義部分 area=(上底+下底)*高/2.0f; return area; void 修改高(float h) /方法定義部分 高=h; 第十九頁,共一百零五頁。鐘表類 思考:該類封裝了時分秒狀態(tài)屬性和

8、設(shè)置時間、顯示時間的功能方法public class Clock / 成員變量 int hour ; int minute ; int second ; / 成員方法 public void setTime(int newH, int newM, int newS) hour=newH ; minute=newM ; second=news ; public void showTime() System.out.println(hour+:+minute+:+second); 第二十頁,共一百零五頁。3、成員變量和局部變量成員變量:變量定義部分定義的變量;局部變量:方法體中定義的變量和方法的參

9、數(shù)。例:找出下面類中的成員變量和局部變量class 梯形 float 上底,下底,高,area; float 計算面積() float area =(上底+下底)*高/2.0f; return area; void 修改高(float h) 高=h; 第二十一頁,共一百零五頁。成員變量和局部變量的類型可以是Java中的任一類型,包括基本類型和引用類型。成員變量在整個類內(nèi)都有效;局部變量只在定義它的方法內(nèi)有效。 成員變量與其在類體中的書寫位置無關(guān),但不提倡將成員變量定義分散開第二十二頁,共一百零五頁。成員變量分為兩種類型: 實例成員變量:簡稱“實例變量”,無“static”修飾類變量:或稱“靜態(tài)

10、變量”,有“static”修飾舉例:class Puppy String 名字;static String 叫聲 = 汪汪; 實例變量類變量第二十三頁,共一百零五頁。如果局部變量與成員變量名稱相同,則:成員變量被隱藏(即在該方法中,成員變量功能失效) 舉例:class Puppy String 名字 = 旺財;void 關(guān)門放狗 ( ) String 名字 = 泰格;System.out.println( 名字 + ,咬他! );Puppy d = new Puppy();d.關(guān)門放狗();運行結(jié)果:泰格,咬他!第二十四頁,共一百零五頁。如果方法參數(shù)與成員變量名稱相同,則:成員變量被隱藏舉例:

11、class Puppy String 名字 = 旺財;void 關(guān)門放狗 ( String 名字 ) System.out.println( 名字 + ,咬他! );Puppy d = new Puppy();d.關(guān)門放狗(泰格 );運行結(jié)果:泰格,咬他!第二十五頁,共一百零五頁。當(dāng)方法的局部變量、方法參數(shù)與成員變量的名稱相同時,如果想調(diào)用成員變量,必須使用“this”關(guān)鍵字this代表調(diào)用該方法的當(dāng)前對象舉例:第二十六頁,共一百零五頁。class Puppy String 名字 = 旺財;void 關(guān)門放狗 ( ) String 名字 = 泰格; System.out.println( 名字

12、 + ,咬他! );void 關(guān)門放狗 ( String 名字 ) System.out.println( 名字 + ,咬他! );Puppy d = new Puppy();d.關(guān)門放狗();d.關(guān)門放狗(泰格 );運行結(jié)果:泰格,咬他!泰格,咬他!this.名字this.名字運行結(jié)果:旺財,咬他!旺財,咬他!第二十七頁,共一百零五頁。聲明格式格式有很多,這里是成員變量的格式,思考有哪些?public | protected | private static final變量數(shù)據(jù)類型 變量名1=變量初值, 變量名2=變量初值, ;格式說明public、protected、private 為訪問

13、控制符static指明這是一個靜態(tài)成員變量final指明變量的值不能被修改成員變量聲明小結(jié):第二十八頁,共一百零五頁。4、方法方法的定義包括兩部分:方法聲明和方法體。void 關(guān)門放狗 ( String 名字 ) System.out.println( 名字 + ,咬他! );方法體方法聲明第二十九頁,共一百零五頁。方法定義格式public | protected | private static finalabstract返回類型 方法名(參數(shù)列表) throws exceptionList方法體第三十頁,共一百零五頁。方法聲明通常包含:修飾符、方法類型、方法名、參數(shù)public stati

14、c void main ( String args )方法類型可以是任意的Java類型,void代表該方法無返回值參數(shù)的類型也可以是任意的Java類型方法體通常包含:局部變量定義、Java語句第三十一頁,共一百零五頁。方法的參數(shù)、方法內(nèi)定義的局部變量有效范圍問題:方法參數(shù)在整個方法內(nèi)有效,方法內(nèi)定義的局部變量從它定義的位置之后開始有效;如果局部變量的定義是在一個復(fù)合語句中,那么該局部變量的有效范圍是該復(fù)合語句;如果局部變量的定義是在一個循環(huán)語句中,那么該局部變量的有效范圍是該循環(huán)語句。第三十二頁,共一百零五頁。void 看門 ( People p ) String 日志;if ( p.身份 =

15、 小偷) String s = 小偷來啦!;報警(); 咬他();日志 += s;if ( p.身份 = 主人) 日志 += 主人來啦!;for (int i = 1 ; i = 100 ; i +) 搖尾巴();System.out.println(日志);System.out.println(s);System.out.println(p.身份);System.out.println(i);有效無效有效無效第三十三頁,共一百零五頁。5、方法重載方法的多態(tài)性一個類中可以有多個方法具有相同的名字,但這些方法的參數(shù)必須不同,即:或者是參數(shù)的個數(shù)不同,或者是參數(shù)的類型不同。 第三十四頁,共一百零五

16、頁。class Area float getArea(float r) return 3.14f*r*r;double getArea(float x,int y)return x*y; float getArea(int y,float x) return x*y; double getArea(float x,float y,float z) return (x*x+y*y+z*z)*2.0; 參數(shù)個數(shù)不同參數(shù)類型不同第三十五頁,共一百零五頁。注意:方法的返回類型和參數(shù)的名字不參與比較,即:即使兩個方法類型不同,也必須保證參數(shù)不同。例如:double getArea(float x,int

17、 y)return x*y;float getArea(float y,int x) return x*y;非法!因為兩個方法參數(shù)相同。第三十六頁,共一百零五頁。6、構(gòu)造方法一種特殊方法,它的名字必須與它所在的類的名字完全相同,而且沒有類型,構(gòu)造方法也可以重載。 沒有類型并不是指返回類型是void,其實返回的類型是類本身第三十七頁,共一百零五頁。class 梯形 float 上底,下底,高;梯形() 上底=60;下底=100;高=20;梯形(float x,int y,float h) 上底=x; 下底=y; 高=h; 名字與類名相同沒有類型重載了兩個構(gòu)造方法梯形 t = new 梯形(0.1

18、,100,100);使用構(gòu)造方法創(chuàng)建了一個對象第三十八頁,共一百零五頁。構(gòu)造方法用于創(chuàng)建一個對象。構(gòu)造方法很“特殊”,不能被其他方法調(diào)用;只能在初始化一個對象的時候使用從內(nèi)存分配上講,一個對象通過構(gòu)造方法初始化結(jié)束過后,才得到該對象的內(nèi)存模型第三十九頁,共一百零五頁。在Java中,類至少需要一個構(gòu)造方法;如果類中沒有構(gòu)造方法,那么在使用該類創(chuàng)建對象時,JVM會為該類自動提供一個無參數(shù)的構(gòu)造方法,稱為默認構(gòu)造方法。如:class Puppy String 名字;static String 叫聲 = 汪汪;Puppy d = new Puppy();調(diào)用了默認構(gòu)造方法,無參數(shù);實際上,默認構(gòu)造方法

19、無任何代碼第四十頁,共一百零五頁。注意:如果類定義了一個或者多個構(gòu)造方法,那么Java不提供默認的構(gòu)造方法。例如:class 梯形 float 上底,下底,高;梯形(float x,int y,float h) 上底=x; 下底=y; 高=h; 梯形 t = new 梯形(0.1,100,100);梯形 t2 = new 梯形();合法非法第四十一頁,共一百零五頁。構(gòu)造方法中通常寫一些初始化成員變量的賦值語句,當(dāng)然也可以寫其他代碼。例如:class Puppy String 名字 = 旺財;Puppy()System.out.println(旺財來也!);Puppy d = new Puppy

20、();運行結(jié)果:旺財來也!第四十二頁,共一百零五頁。7、類方法和實例方法類中的方法也可分為實例方法和類方法:不加關(guān)鍵字static的是實例方法;加關(guān)鍵字static的是類方法 構(gòu)造方法是特殊的方法,不能用static修飾構(gòu)造方法第四十三頁,共一百零五頁。8、值得注意的問題對成員變量的操作只能放在方法中,在定義類的成員變量時可以同時賦初值,如:class A int a = 12;class A int a;a = 12;合法非法因為:類體的內(nèi)容由成員變量定義、方法定義兩部分組成。第四十四頁,共一百零五頁。實例方法既能對類變量操作,也能對實例變量操作;而類方法只能對類變量進行操作。例如:clas

21、s A int a = 12;static int b;void f() a = 120;b = 210;static void g() a = 1;b = 2;合法非法合法合法第四十五頁,共一百零五頁。實例方法可以調(diào)用該類中的其他方法;而類方法只能調(diào)用該類的類方法,不能調(diào)用實例方法。例如:class A static int a; static void g() a = 3;void f() g(); static void h() g(); f();合法非法合法第四十六頁,共一百零五頁。2.3 對象 類是創(chuàng)建對象的模板。當(dāng)使用一個類創(chuàng)建了一個對象時,我們也說該對象是這個類的一個實例。在程序

22、中,同一個類可以創(chuàng)建多個對象。第四十七頁,共一百零五頁。1、創(chuàng)建對象包括對象聲明和為對象分配內(nèi)存兩個步驟。(1)對象聲明一般格式為:類名 對象名;如:People zhangPing;第四十八頁,共一百零五頁。(2)為對象分配內(nèi)存使用new運算符和類的構(gòu)造方法為聲明的對象分配內(nèi)存new運算符的功能可以理解為:“給我一個新對象”如果類中沒有構(gòu)造方法,系統(tǒng)會調(diào)用默認的構(gòu)造方法第四十九頁,共一百零五頁。(3)對象的內(nèi)存模型例子:西游記人物class 西游記人物 float 身高, 體重;String 發(fā)型, 耳朵,手,腳, 嘴巴;void 喊話(String s) System.out.printl

23、n(s); 執(zhí)行代碼:西游記人物 豬八戒; /聲明對象豬八戒 = new 西游記人物(); /分配內(nèi)存,使用了new 運算符和默認構(gòu)造方法第五十頁,共一百零五頁。首先,聲明了一個對象“豬八戒”。西游記人物 豬八戒;此時的內(nèi)存模型如圖所示: NULL豬八戒未分配實體的對象“空對象”第五十一頁,共一百零五頁。然后,實例化對象“豬八戒”。豬八戒 = new 西游記人物(); 此時,JVM會做兩件事:為“西游記人物”類的“發(fā)型”等成員變量分配內(nèi)存;接著執(zhí)行構(gòu)造方法。如果成員變量沒有被初始化,則系統(tǒng)提供默認值。new運算符在為成員變量分配內(nèi)存后,將返回一個引用給變量“豬八戒”,即:記錄對象的起始地址。第

24、五十二頁,共一百零五頁?!柏i八戒”實例化后的內(nèi)存模型如圖所示:存儲成員的空間是連續(xù)的,因此,對象“豬八戒”內(nèi)保存的其實是第一個成員變量的首地址豬八戒0.00.0nullnullnullnullnull體重耳朵手腳嘴巴身高發(fā)型0 xAB3第五十三頁,共一百零五頁。創(chuàng)建多個不同對象一個類可以通過使用new運算符創(chuàng)建多個不同對象,這些對象將分配不同的內(nèi)存空間,因此,改變一個對象的成員變量不會影響其他對象的狀態(tài)。例如:創(chuàng)建兩個“西游記人物”類型的對象:西游記人物 豬八戒 = new 西游記人物();西游記人物 孫悟空 = new 西游記人物();第五十四頁,共一百零五頁。兩個對象實例化后的內(nèi)存模型如圖

25、所示:豬八戒0.00.0nullnullnullnullnull0 xAB3孫悟空0.00.0nullnullnullnullnull0 xFA6第五十五頁,共一百零五頁。2、使用對象通過使用運算符“.”,對象可以訪問自己的成員變量或者調(diào)用方法。例如:class 西游記人物 float 身高, 體重; String 發(fā)型, 耳朵,手,腳, 嘴巴;void 喊話(String s) System.out.println(s);第五十六頁,共一百零五頁。執(zhí)行代碼:西游記人物 豬八戒 = new 西游記人物();豬八戒.發(fā)型 = 光頭;豬八戒.喊話( 俺老豬五百年前是帥哥! );訪問成員變量調(diào)用方法

26、第五十七頁,共一百零五頁。3、對象的引用和實體用類創(chuàng)建一個對象時,類中的成員變量被分配內(nèi)存空間,這些內(nèi)存空間稱做該對象的實體,而對象中存放著引用(即地址)。 一個類創(chuàng)建的多個對象,如果具有相同的引用,那么就具有完全相同的實體。第五十八頁,共一百零五頁。例如:類Point:用x,y坐標(biāo)表示的點class Point int x,y;Point(int x,int y) this.x = x;this.y = y;第五十九頁,共一百零五頁。執(zhí)行代碼:Point p1 = new Point(1,1);Point p2 = new Point(100,100);p1 = p2;p111yx0 xAB

27、3p2100100yx0 xFF7問題:這部分內(nèi)存怎么辦?0 xFF7第六十頁,共一百零五頁。沒有實體的對象稱作空對象,空對象不能使用;如果一個實體不再被任何對象所擁有,則變成了“內(nèi)存垃圾”;Java有“垃圾回收”機制,周期性的檢測某實體是否已經(jīng)不再被任何對象所擁有,發(fā)現(xiàn)則回收內(nèi)存。 第六十一頁,共一百零五頁。4、參數(shù)傳值當(dāng)方法被調(diào)用時,如果方法有參數(shù),參數(shù)必須要實例化,即參數(shù)變量必須有具體的值。在Java中,方法的所有參數(shù)都是“傳值”的,也就是說,方法中參數(shù)變量的值是調(diào)用者指定的值的拷貝。第六十二頁,共一百零五頁。參數(shù)傳值的精度轉(zhuǎn)換問題:對于基本數(shù)據(jù)類型的參數(shù),向該參數(shù)傳遞的值的精度不可以高

28、于該參數(shù)的精度。例如:不可以向int型參數(shù)傳遞一個float值,但可以向double型參數(shù)傳遞一個float值。第六十三頁,共一百零五頁。參數(shù)傳值對變量的影響:傳遞基本類型的變量由于基本類型變量中保存的是“值”,因此改變的僅僅是值的副本,傳值的變量內(nèi)容不會改變;傳遞引用類型的變量由于引用類型變量中保存的是“地址”,因此盡管傳遞的是“地址”的副本,但是改變的是“地址”所對應(yīng)的內(nèi)存實體,因此變量內(nèi)容發(fā)生改變。第六十四頁,共一百零五頁。例如:class 西游記人物 double 體重;void 設(shè)置體重(double x) 體重= x;第六十五頁,共一百零五頁。class 塑身 void 改變體重(

29、 西游記人物 p, double x ) x = x - 20;p.設(shè)置體重(x);第六十六頁,共一百零五頁。執(zhí)行代碼:西游記人物 八戒= new 西游記人物();八戒.設(shè)置體重(300.00);西游記人物 悟空 = new 西游記人物();八戒300.00體重0 xAB3悟空0.00體重0 xFF7第六十七頁,共一百零五頁。執(zhí)行代碼:塑身 帥 = new 塑身();帥.改變體重(悟空,八戒.體重); px改變體重0 xF110八戒300.00體重0 xAB3悟空0.00體重0 xFF7調(diào)用方法時,會創(chuàng)建方法棧來保存方法的變量。x = x - 20;p.設(shè)置體重(x);280.00300.00

30、0 xFF7280.00第六十八頁,共一百零五頁。2.4 Static關(guān)鍵字類變量與類方法:用static修飾的成員變量稱為類變量 用static修飾的方法稱為類方法 第六十九頁,共一百零五頁。1、實例變量和類變量的區(qū)別一個類通過new運算符可以創(chuàng)建多個對象,每個對象的實例變量將被分配不同的內(nèi)存空間;而對于類變量,每個對象的類變量都共享同一內(nèi)存空間,因此,改變其中一個對象的類變量的值,會影響其它對象的這個類變量。第七十頁,共一百零五頁。從內(nèi)存分配上來說:實例變量的內(nèi)存在創(chuàng)建對象時才會分配,不同的對象分配不同地址;類變量的內(nèi)存在加載類時就創(chuàng)建好了,不管這個類是否創(chuàng)建了對象,類變量地址固定不變。第

31、七十一頁,共一百零五頁。例如:class 西游記人物 static String 發(fā)型; double 體重=70;西游記人物(String s,double x) 發(fā)型=s;體重= x;第七十二頁,共一百零五頁。執(zhí)行代碼:西游記人物 悟空 = new 西游記人物(毛寸,75 );西游記人物 沙僧= new 西游記人物(溜冰場, 90 );System.out.println(沙僧.發(fā)型);System.out.println(沙僧.體重);System.out.println(悟空.發(fā)型);System.out.println(悟空.體重);第七十三頁,共一百零五頁。2、實例方法和類方法的區(qū)

32、別實例方法也是在創(chuàng)建對象時才分配入口地址的,但是,后面所創(chuàng)建的對象共享第一個對象創(chuàng)建時生成的入口地址,也就是說,方法的入口地址被所有對象共享。當(dāng)所有對象都不存在時,實例方法的入口地址才被回收。第七十四頁,共一百零五頁。而對于類方法,入口地址在加載類時就分配了,無論類是否創(chuàng)建了對象,該入口地址都可以直接使用(用類名直接調(diào)用)。當(dāng)程序退出時,類方法的入口地址才被回收。第七十五頁,共一百零五頁。2.5 this 關(guān)鍵字this表示“當(dāng)前對象”。 this可以出現(xiàn)在實例方法和構(gòu)造方法中,但不可以出現(xiàn)在類方法中。 this關(guān)鍵字出現(xiàn)在類的構(gòu)造方法中時,代表使用該構(gòu)造方法所創(chuàng)建的對象。 this關(guān)鍵字出現(xiàn)

33、在類的實例方法中時,代表正在調(diào)用該方法的當(dāng)前對象。 第七十六頁,共一百零五頁。例如:class A int x;void f()this.x = 100;執(zhí)行代碼:A a1 = new A();A a2 = new A();a1.f();a2.f();第七十七頁,共一百零五頁。2.6 包包是Java中有效的管理類的一個機制。 1、包語句通過關(guān)鍵字package聲明包語句。package 語句作為Java源文件的第一條語句,指明該源文件定義的類所在的包。package語句的一般格式為:package 包名;第七十八頁,共一百零五頁。如果源程序中省略了package語句,那么:源文件中定義命名的類

34、被隱含地認為是“無名包”的一部分,即:源文件中定義命名的類在同一個包中,但該包沒有名字包名可以是一個合法的標(biāo)識符,也可以是若干個標(biāo)識符加“.”分割而成 第七十九頁,共一百零五頁。2、import 語句使用import 語句可以引入包中的類。例如:引入一個包中的所有類:import java.awt.*;引入某個類:import java.util.Date;第八十頁,共一百零五頁。注意:Java會自動載入java.lang包中的所有類,因此不需要顯式的importjava.lang包中包含了系統(tǒng)的核心類,是程序運行必不可少的。如果import引入了整個包中的類,那么會增加編譯時間,但是不會影響

35、程序運行性能,因為Java是動態(tài)加載類的。第八十一頁,共一百零五頁。所謂訪問權(quán)限是指對象是否可以通過“.”運算符操作自己的變量,或使用類中的方法。 訪問限制修飾符有private、protected和public,或者可以無修飾符。2.7訪問權(quán)限第八十二頁,共一百零五頁。問題:訪問權(quán)限有什么用處?用來限制不同類的對象之間訪問成員變量或者調(diào)用方法的權(quán)限注意:在編寫類的時候,類中的實例方法總是可以訪問該類的成員變量;類方法總是可以操作該類中的類變量,與訪問限制符無關(guān)系。第八十三頁,共一百零五頁。舉例:class 教師 public String 姓名; private double 身高;void

36、 set教師信息(String s,double d) 姓名=s;身高 = d;對于教師類的某個實例方法可以不受限制的訪問成員變量,與修飾符無關(guān)第八十四頁,共一百零五頁。而對于不同的類,訪問存在限制:class 教師 public String 姓名; private double 身高; void set教師信息(String s,double d) 姓名=s;身高 = d; class 學(xué)生 教師 小郭子=new 教師(); void set教師信息(String s,double d) 小郭子.姓名=s;小郭子.身高 = d; 若某學(xué)生對象想訪問教師對象中的成員:第八十五頁,共一百零五頁

37、。執(zhí)行以下代碼:學(xué)生 小張 = new 學(xué)生();小張.set教師信息(馬路殺手,170);出錯!錯誤描述:public修飾的姓名可以修改; private修飾的身高不能訪問!不同類的對象之間,訪問成員變量或方法的權(quán)限是由修飾符限制的。第八十六頁,共一百零五頁。問題:為什么要設(shè)置訪問權(quán)限?保護數(shù)據(jù)類封裝了本身特有的成員和方法,其中有一部分是不希望被其他無關(guān)的對象訪問的。盡量將數(shù)據(jù)“私有化”可以盡可能的保護這些數(shù)據(jù),使類的職責(zé)“分工明確”。第八十七頁,共一百零五頁。class 教師 public String 姓名; private double 身高; void set教師信息(String

38、s,double d) 姓名=s;身高 = d; 允許其他類的對象訪問只希望“教師”自己的方法來管理第八十八頁,共一百零五頁。1、私有變量和私有方法用private修飾本類中的實例方法可以訪問本類的私有變量和方法只有在本類中創(chuàng)建該類的對象時,這個對象才能訪問自己的私有變量和方法:在類A中創(chuàng)建了類A的對象a,a能訪問自己的私有變量和方法在類B中創(chuàng)建了類A的對象a,則a不能訪問自己的私有變量和方法 第八十九頁,共一百零五頁。class 教師 public String 姓名; private double 身高; void set教師信息(String s,double d) 姓名=s;身高 =

39、d; 第九十頁,共一百零五頁。class 教師 public String 姓名; private double 身高; void set教師信息(String s,double d) 教師 小郭 = new 教師();小郭.姓名=s;小郭.身高 = d; class 學(xué)生 void set教師信息(String s,double d) 教師 小郭 = new 教師();小郭.姓名=s;小郭.身高 = d; 合法非法第九十一頁,共一百零五頁。2、共有變量和共有方法用public修飾即使不是在本類中創(chuàng)建該類的對象,該對象也能訪問自己的共有變量和共有方法在類B中創(chuàng)建了類A的對象a,則a能訪問自己的

40、共有變量和方法 第九十二頁,共一百零五頁。class 教師 public String 姓名; public double 身高; void set教師信息(String s,double d) 教師 小郭 = new 教師();小郭.姓名=s;小郭.身高 = d; class 學(xué)生 void set教師信息(String s,double d) 教師 小郭 = new 教師();小郭.姓名=s;小郭.身高 = d; 合法合法第九十三頁,共一百零五頁??梢哉f,某個對象的public成員允許在任何類的對象中訪問而不受限制同理,對于一個類的共有類變量,那么在另外一個類中,也能通過類名來操作這個共有類變量。第九十四頁,共一百零五頁。3、友好變量和友好方法無修飾符修飾的變量和方法稱為友好變量和友好方法,或簡稱“友元” 即使不是在本類中創(chuàng)建該類的對象,如果這兩個類在同一個包中,該對象也能訪問自己的友好變量和友好方法在類B中創(chuàng)建了類A的對象a,若類A和類B在同一包中,則a能訪問自己的友元第九十五頁,共一百零五頁。package guo;class 教師 String 姓名; double 身高; void set教師信息(String s,double d) 教師 小郭 = new 教師();小郭.姓名=s;小郭.身高 = d;

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論