類與對(duì)象的基本概念_第1頁
類與對(duì)象的基本概念_第2頁
類與對(duì)象的基本概念_第3頁
類與對(duì)象的基本概念_第4頁
類與對(duì)象的基本概念_第5頁
已閱讀5頁,還剩43頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第二章 類與對(duì)象的基本概念2.1 面向?qū)ο蟮某绦蛟O(shè)計(jì)方法概數(shù)面向?qū)ο蟮某绦蛟O(shè)計(jì)方法概數(shù) 面向?qū)ο蟪绦虻幕窘M成單位是面向?qū)ο蟪绦虻幕窘M成單位是對(duì)象對(duì)象。1、抽象、抽象2、封裝、封裝3、繼承:、繼承:java語言只支持單繼承語言只支持單繼承4、多態(tài)、多態(tài)2.2 類與對(duì)象類與對(duì)象 類就是一塊模板。類就是一塊模板。Objects是在其類是在其類模塊上建立起來的,很象根據(jù)建筑圖紙來模塊上建立起來的,很象根據(jù)建筑圖紙來建樓。同樣的圖紙可用來建許多樓房,而建樓。同樣的圖紙可用來建許多樓房,而每棟樓房是它自己的一個(gè)對(duì)象。每棟樓房是它自己的一個(gè)對(duì)象。 類定義了對(duì)象是什么,但它本身不是類定義了對(duì)象是什么,但它

2、本身不是一個(gè)對(duì)象。一個(gè)對(duì)象。 在在Java編程語言中使用編程語言中使用new運(yùn)算符實(shí)運(yùn)算符實(shí)例化一個(gè)對(duì)象。例化一個(gè)對(duì)象。 2.2.1 類的聲明類的聲明publicabstract|final class classNameextends superclassNameimplements interfaceNameList變量成員聲明和初始化;變量成員聲明和初始化;方法聲明及方法體;方法聲明及方法體;public class EmpInfo /成員變量成員變量String name; String title; String department; /成員方法成員方法 void print()

3、System.out.println(name + is + title + at + department); 2.2.2對(duì)象的聲明和實(shí)例化。按下述步驟實(shí)現(xiàn):對(duì)象的聲明和實(shí)例化。按下述步驟實(shí)現(xiàn): EmpInfo employee = new EmpInfo(); = Robert Javaman ; employee.title = Manager; employee.department=Coffee Shop ; employee.print();1、類、類X的一個(gè)對(duì)象成為類的一個(gè)對(duì)象成為類X的一個(gè)實(shí)例。的一個(gè)實(shí)例。2、生成一個(gè)對(duì)象(實(shí)例):、生成一個(gè)對(duì)象(實(shí)

4、例):new classname();(); 作用作用1、分配內(nèi)存空間、分配內(nèi)存空間 作用作用2、返回對(duì)象的引用地址、返回對(duì)象的引用地址3、聲明一個(gè)引用變量并沒有生成該對(duì)聲明一個(gè)引用變量并沒有生成該對(duì)象。象。EmpInfo employee;employee.print();/出錯(cuò)出錯(cuò)EmpInfo employee=null;employee.print();/編譯不會(huì)出錯(cuò)編譯不會(huì)出錯(cuò)2.2.3數(shù)據(jù)成員(成員變量)數(shù)據(jù)成員(成員變量) 成員變量的聲明方式如下:成員變量的聲明方式如下:public | protected | private static final transient vol

5、atile typevariableName; 其中,其中,static: 靜態(tài)變量(類變量);相對(duì)于實(shí)例靜態(tài)變量(類變量);相對(duì)于實(shí)例變量變量final: 常量常量transient: 暫時(shí)性變量,用于對(duì)象存檔暫時(shí)性變量,用于對(duì)象存檔volatile: 共享變量,用于并發(fā)線程的共享共享變量,用于并發(fā)線程的共享1、實(shí)例變量實(shí)例變量 用來存儲(chǔ)實(shí)例所需要的屬性信息,用來存儲(chǔ)實(shí)例所需要的屬性信息,不同的實(shí)例的屬性值可能不同。不同的實(shí)例的屬性值可能不同。.class Circleint radius; public class ShapeTesterpublic static void main(St

6、ring args)Circle x;x=new Circle();System.out.println(x);System.out.println(radius=+x.radius);/保存為保存為ShapeTester.java2、類變量、類變量 類的所有實(shí)例都具有相同值的,或者類的所有實(shí)例都具有相同值的,或者是類的所有實(shí)例都需要共享的變量。用是類的所有實(shí)例都需要共享的變量。用標(biāo)識(shí)。標(biāo)識(shí)。 例如:火車票等例如:火車票等調(diào)用方法:調(diào)用方法: .public class Circle1static double PI=3.1415926;int radius;/保存為保存為Circle1.ja

7、vapublic class ClassVariableTesterpublic static void main(String args) Circle1 x=new Circle1();System.out.println(x.PI);System.out.println(Circle1.PI);Circle1.PI=3.14;System.out.println(x.PI);System.out.println(Circle1.PI);/保存為保存為ClassVariableTester.java2.2.4 方法成員(成員方法)方法成員(成員方法) 方法的實(shí)現(xiàn)包括兩部分內(nèi)容:方法聲方法的

8、實(shí)現(xiàn)包括兩部分內(nèi)容:方法聲明和方法體。明和方法體。public | protected | private staticfinal| abstract native synchronizedreturnType methodName(paramList)throws exceptionList /方法聲明方法聲明statements /方法體方法體方法聲明中的限定詞的含義:方法聲明中的限定詞的含義:static: 類方法,可通過類名直接類方法,可通過類名直接調(diào)用調(diào)用abstract: 抽象方法,沒有方法體抽象方法,沒有方法體final: 方法不能被重寫方法不能被重寫native: 集成其它語言

9、的代碼集成其它語言的代碼synchronized: 控制多個(gè)并發(fā)線程控制多個(gè)并發(fā)線程的訪問的訪問方法的執(zhí)行:發(fā)送消息。方法的執(zhí)行:發(fā)送消息。.(參數(shù)列表參數(shù)列表)1、實(shí)例方法、實(shí)例方法 實(shí)例方法表示特定對(duì)象的行為。使用實(shí)實(shí)例方法表示特定對(duì)象的行為。使用實(shí)例方法必須首先實(shí)例化類為具體的對(duì)象。例方法必須首先實(shí)例化類為具體的對(duì)象。 public class ShapeTesterpublic static void main(String args)Circle x;x=new Circle();System.out.println(x);x.printr();class Circleint rad

10、ius;void printr() System.out.println(radius=+radius); 參數(shù)的類型可以是簡單數(shù)據(jù)類型,參數(shù)的類型可以是簡單數(shù)據(jù)類型,也可以是復(fù)合數(shù)據(jù)類型也可以是復(fù)合數(shù)據(jù)類型 . 對(duì)于對(duì)于簡單數(shù)據(jù)類型簡單數(shù)據(jù)類型來說,來說,java實(shí)現(xiàn)實(shí)現(xiàn)的是的是值傳遞,方法接收參數(shù)的值,但不值傳遞,方法接收參數(shù)的值,但不能改變這些參數(shù)的值能改變這些參數(shù)的值。如果要改變參數(shù)。如果要改變參數(shù)的值,則用的值,則用引用數(shù)據(jù)類型引用數(shù)據(jù)類型,因?yàn)橐脭?shù),因?yàn)橐脭?shù)據(jù)類型據(jù)類型傳遞給方法的是數(shù)據(jù)在內(nèi)存中的傳遞給方法的是數(shù)據(jù)在內(nèi)存中的地址,方法中對(duì)數(shù)據(jù)的操作可以改變數(shù)地址,方法中對(duì)數(shù)據(jù)的

11、操作可以改變數(shù)據(jù)的值。據(jù)的值。例:例:PassTest.java2、類方法(靜態(tài)方法)、類方法(靜態(tài)方法) 在方法前用在方法前用static關(guān)鍵字修飾關(guān)鍵字修飾。類方法表示。類方法表示具體實(shí)例對(duì)象中共有的行為。這些行為是相同具體實(shí)例對(duì)象中共有的行為。這些行為是相同的,所以用的,所以用類名類名.方法名(方法名(參數(shù)參數(shù))對(duì)象名對(duì)象名.方法名(方法名(參數(shù)參數(shù))public class Convertpublic static void main(String args)int f;f=Converter.cTOF(40);System.out.println(f);class Converter

12、public static int cTOF(int cent)return(cent*9/5+32); 屬于類的變量和方法屬于類的變量和方法-static static 在變量或方法之前在變量或方法之前, 表明它們是表明它們是屬于類的屬于類的,class ABCD char data; static int_share_data; class Demo ABCD a,b,c,dobject bchar dataobject cchar dataObject bchar datastatic intshare_dataobject bchar data 靜態(tài)變量在各實(shí)例間共享靜態(tài)變量在各實(shí)例間

13、共享如果是如果是public靜態(tài)變量靜態(tài)變量,則其它類可以則其它類可以不通過實(shí)例化訪問它們不通過實(shí)例化訪問它們靜態(tài)方法稱為類的方法靜態(tài)方法稱為類的方法,因此不用實(shí)例因此不用實(shí)例化即可調(diào)用化即可調(diào)用(面向過程面向過程)一個(gè)對(duì)象的方法可以訪問對(duì)象的數(shù)據(jù)成一個(gè)對(duì)象的方法可以訪問對(duì)象的數(shù)據(jù)成員員,盡管不屬于方法的局部變量盡管不屬于方法的局部變量一個(gè)類的方法只能訪問自己的局部變量一個(gè)類的方法只能訪問自己的局部變量例例:不正確的引用不正確的引用class StaticError String mystring=“hello”; public static void main(String args) Sy

14、stem.out.println(mystring);錯(cuò)誤信息錯(cuò)誤信息:cant make a static reference to nonstatic variable.為什么不正確為什么不正確? 只有對(duì)象的方法可以訪問對(duì)象的變量只有對(duì)象的方法可以訪問對(duì)象的變量.解決的辦法解決的辦法:1. 將變量改稱類變量將變量改稱類變量class StaticError static String mystring=“hello”; public static void main(String args) System.out.println(mystring);2. 將變量定義為方法中的變量將變量定義

15、為方法中的變量class NoStaticError public static void main(String args) String mystring=“hello”; System.out.println(mystring); 2.2.5 包包類的組織類的組織包的作用:包的作用:1、組織相關(guān)的源代碼文件、組織相關(guān)的源代碼文件2、不同包中的類名可以相同,用來、不同包中的類名可以相同,用來避免名字沖突避免名字沖突3、提供包一級(jí)的封裝和存取權(quán)限、提供包一級(jí)的封裝和存取權(quán)限包與目錄:包與目錄:package 包名;包名;1、定義包的語句必須放在所有程序的最、定義包的語句必須放在所有程序的最前

16、面前面2、包定義語句不是必須的,如果沒有定、包定義語句不是必須的,如果沒有定義包,則當(dāng)前編譯單元屬于無名包,生義包,則當(dāng)前編譯單元屬于無名包,生成的成的class文件放在一般與文件放在一般與.java文件同目文件同目錄。錄。引入包:引入包:import package.package.(classname|*)例如:例如:import java.class051.three. Converter;import java.class051.three.*; Java編譯器會(huì)自動(dòng)引入包編譯器會(huì)自動(dòng)引入包java.lang,對(duì)于其他的包,如果程序中使用到包對(duì)于其他的包,如果程序中使用到包中的類,則必

17、須使用中的類,則必須使用import引入。引入。2.2.6 類的訪問控制類的訪問控制只有只有public和無修飾符(默認(rèn))兩種。和無修飾符(默認(rèn))兩種。類型類型無修飾符無修飾符public同一包中的同一包中的類類可訪問可訪問可訪問可訪問不同包中的不同包中的類類不可訪問不可訪問可訪問可訪問 注意:注意:一個(gè)源程序中至多有一個(gè)一個(gè)源程序中至多有一個(gè)public共有類,且必須與共有類,且必須與public類名相同類名相同2.2.7類成員的訪問控制類成員的訪問控制同一同一個(gè)類個(gè)類同一同一個(gè)包個(gè)包不同包不同包的子類的子類不同包不同包非子類非子類private*default*protected*publ

18、ic*Java名空間及訪問規(guī)則名空間及訪問規(guī)則 變量和方法的修飾字變量和方法的修飾字public、protected、private public: 任何其它類、對(duì)象只要可以看到這個(gè)任何其它類、對(duì)象只要可以看到這個(gè)類的話,那么它就可以存取變量的數(shù)據(jù),或類的話,那么它就可以存取變量的數(shù)據(jù),或使用方法。使用方法。class ABC public int pub_i=5; public void show)() System.out.println (“pub_i”+pub_i);Java名空間及訪問規(guī)則名空間及訪問規(guī)則class Demo public static void main(Strin

19、g args) ABC abc=new ABC(); System.out.println(“abc.pub_i”+abc.pub_i); abc.pub_i=10; abc.show(); abc.pub_i=5pub_i=10;Java名空間及訪問規(guī)則名空間及訪問規(guī)則 protected變量和方法變量和方法 如果一個(gè)類中變量或方法有修飾字如果一個(gè)類中變量或方法有修飾字protected,同一類,同一包可以使,同一類,同一包可以使用。不同包的類要使用,必須是該用。不同包的類要使用,必須是該類的子類可以存取變量或調(diào)用類的子類可以存取變量或調(diào)用public class ABC protected

20、 int pro_i=5; protected void show() System.out.println (“pro_i=” +pro_i;) Java名空間及訪問規(guī)則名空間及訪問規(guī)則 不同包中的類不能使用不同包中的類不能使用class DEF public static void main(String args) ABC abc=new ABC(); System.out.println (“_i=“+_i); abc.pub_i=10; abc.show(); import mytest.pack.ABC;class DEF extends ABC pub

21、lic static void main(String agrs) DEF def=new DEF(); System.out.println(def.i); def.i=10; def.show(); pro_i=5pro_i=10Java名空間及訪問規(guī)則名空間及訪問規(guī)則 不同包但是是子類不同包但是是子類Java名空間及訪問規(guī)則名空間及訪問規(guī)則 private不允許任何其他類存取和調(diào)用不允許任何其他類存取和調(diào)用 friendly(前邊沒有修飾字的情況前邊沒有修飾字的情況)在同一程序包中出現(xiàn)的類才可在同一程序包中出現(xiàn)的類才可以直接使用它的數(shù)據(jù)和方法以直接使用它的數(shù)據(jù)和方法.Java名空間及訪問

22、規(guī)則名空間及訪問規(guī)則 當(dāng)子類中的變量名與父類的相同當(dāng)子類中的變量名與父類的相同,原來的變量原來的變量被遮蓋被遮蓋.class A static int data_a=3;class B extends A static int data_a=5;class C extends B void print_out() System.out.println(“data_a= ”+data_a); System.out.println(“A.data_a= ”+A.data_a); System.out.println(“B.data_a= ”+B.data_a); data_a=5A.data_a=

23、3B.data_a=5class demo public static void main(String args) C c=new C(); c.print_out(); Java名空間及訪問規(guī)則名空間及訪問規(guī)則1231.23類類void show(int int_num)void show(double double_num)void show(nit nit_ um, float float_um)123,1.23 方法的覆蓋方法的覆蓋(overriding)和重載和重載(overloading) 子孫類中定義的方法和祖先類中某個(gè)方法同子孫類中定義的方法和祖先類中某個(gè)方法同名名,同參數(shù)行

24、同參數(shù)行,則祖先類中的該方法被覆蓋則祖先類中的該方法被覆蓋. 方法的重載是指一個(gè)對(duì)象的多態(tài)性方法的重載是指一個(gè)對(duì)象的多態(tài)性,即多個(gè)方即多個(gè)方法用相同的名稱法用相同的名稱,但參數(shù)行不同但參數(shù)行不同.Java名空間及訪問規(guī)則名空間及訪問規(guī)則到此為止到此為止-finalfinal在方法之前在方法之前,防止該方法被覆蓋防止該方法被覆蓋.final在類之前在類之前,標(biāo)是該類不能被繼承標(biāo)是該類不能被繼承final在變量之前在變量之前,定義一個(gè)常量定義一個(gè)常量. 一般情況下,我們很少把成一般情況下,我們很少把成員變量標(biāo)識(shí)為員變量標(biāo)識(shí)為public類型,而使用類型,而使用private類型。類型。 通過使用類

25、或者對(duì)象的通過使用類或者對(duì)象的set方方法和法和get方法對(duì)成員變量進(jìn)行修改方法對(duì)成員變量進(jìn)行修改或者取得成員變量的值?;蛘呷〉贸蓡T變量的值。public class Circlestatic double PI=3.14.5926;private int radius; public double circumference()return(2*PI*radius);/ radius為私有類型,不能被其他類訪問為私有類型,不能被其他類訪問到。到。 通過通過set和和get方法為私有變量方法為私有變量radius賦值和取得其數(shù)據(jù)。賦值和取得其數(shù)據(jù)。public class Circlestat

26、ic double PI=3.14.5926;private int radius; public double circumference()return(2*PI*radius);public int getRadius()return radius;public int setRadius(int r)radius=r;this的用法的用法(使用使用this來表示來表示“自己自己”)public class Circlestatic double PI=3.14.5926;private int radius; public double circumference()return(2*PI*radius);public int getRadius()return radius;public int setRadius(int radius)this.radius= radius; 使用使用new做內(nèi)存配置做內(nèi)存配置class Demo1 / 數(shù)組的配置數(shù)組的配置 public static void main(String args ) int array ;

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論