




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、本章要點(diǎn) 類(lèi)的定義、屬性和方法 類(lèi)的修飾符和訪問(wèn) 對(duì)象的定義 方法的參數(shù)傳遞 類(lèi)的基本方法 內(nèi)部類(lèi)的定義和使用方法第1頁(yè)/共150頁(yè)類(lèi) 類(lèi)表示一類(lèi)事物的集合,作為Java的基礎(chǔ),其封裝了Java中各個(gè)概念的基本信息。類(lèi)也是一個(gè)抽象概念,不能代表一個(gè)具體的實(shí)例,同時(shí),類(lèi)是對(duì)象的集合,具體表現(xiàn)形式就是對(duì)象,也稱為對(duì)象的模板。Java的系統(tǒng)類(lèi)庫(kù)中定義了大量的不同功能的類(lèi)均可以直接使用。第2頁(yè)/共150頁(yè)第3頁(yè)/共150頁(yè)思考:汽車(chē)類(lèi)的組成第4頁(yè)/共150頁(yè) 因此,我們創(chuàng)建一個(gè)汽車(chē)類(lèi),則可表示為:第5頁(yè)/共150頁(yè)類(lèi)和對(duì)象 類(lèi)是定義對(duì)象的模板,用來(lái)描述一類(lèi)事物的共有屬性和功能。 對(duì)象是一個(gè)具體的事物。
2、例:汽車(chē)類(lèi)某輛汽車(chē)(對(duì)象)學(xué)生類(lèi)某個(gè)學(xué)生(對(duì)象)窗口類(lèi)某個(gè)具體的窗口(對(duì)象)第6頁(yè)/共150頁(yè)繼承關(guān)系(一般和特殊)第7頁(yè)/共150頁(yè)面向?qū)ο髴?yīng)考慮的問(wèn)題: 該問(wèn)題中有哪些類(lèi)、哪些對(duì)象 類(lèi)、對(duì)象的屬性和方法 類(lèi)之間具備的關(guān)系:如繼承等第8頁(yè)/共150頁(yè)類(lèi)類(lèi)的定義 屬性和方法 類(lèi)的訪問(wèn) 應(yīng)用舉例第9頁(yè)/共150頁(yè)類(lèi)和對(duì)象是JavaJava的核心和本質(zhì)。它們是JavaJava語(yǔ)言的基礎(chǔ),編寫(xiě)一個(gè)JavaJava程序,在某種程度上來(lái)說(shuō)就是定義類(lèi)和創(chuàng)建對(duì)象。定義類(lèi)和建立對(duì)象是JavaJava編程的主要任務(wù)。 必須先定義類(lèi),才能創(chuàng)建對(duì)象。 每一個(gè)class,class,都是現(xiàn)實(shí)世界的抽象。 第10頁(yè)/共
3、150頁(yè)類(lèi)的定義 一個(gè)完整的類(lèi)包括類(lèi)頭和類(lèi)體兩個(gè)基本部分。類(lèi)頭由關(guān)鍵字class、類(lèi)名和修飾符構(gòu)成,負(fù)責(zé)類(lèi)的聲明,類(lèi)體由屬性(成員變量)和方法構(gòu)成,負(fù)責(zé)類(lèi)的實(shí)現(xiàn),屬性與方法統(tǒng)稱類(lèi)的成員。第11頁(yè)/共150頁(yè)類(lèi)的定義 修飾符 class 類(lèi)名 extends 父類(lèi)名 implements 接口名 類(lèi)體的內(nèi)容 第12頁(yè)/共150頁(yè)類(lèi)的定義 修飾符定義了類(lèi)的訪問(wèn)權(quán)限,可以是public、abstract和final也可以省略。 class表示類(lèi)定義的開(kāi)始,后面是新定義的類(lèi)名,類(lèi)名必須是合法的標(biāo)識(shí)符,一般類(lèi)名的首字母應(yīng)該大寫(xiě)并能體現(xiàn)該類(lèi)的功能或特征。第13頁(yè)/共150頁(yè)類(lèi)的定義 extends 父類(lèi)名
4、表示該類(lèi)是某一個(gè)父類(lèi)的子類(lèi)。 implements 接口名表示該類(lèi)實(shí)現(xiàn)的借口,一個(gè)類(lèi)可以同時(shí)實(shí)現(xiàn)多個(gè)接口。第14頁(yè)/共150頁(yè)屬性和方法 通常一個(gè)完整的類(lèi)都包含屬性和方法兩個(gè)部分。 屬性 方法 第15頁(yè)/共150頁(yè)屬性 類(lèi)的屬性,也稱為成員變量,描述了該類(lèi)內(nèi)部的信息,是類(lèi)的靜態(tài)屬性。屬性可以是簡(jiǎn)單變量,也可以是對(duì)象、數(shù)組或其他復(fù)雜數(shù)據(jù)結(jié)構(gòu)。 1)定義屬性為簡(jiǎn)單變量的格式 定義屬性為簡(jiǎn)單變量的格式為:修飾符 數(shù)據(jù)類(lèi)型 成員變量名=值;第16頁(yè)/共150頁(yè)屬性 成員變量的修飾符指明了該變量的訪問(wèn)權(quán)限,修飾符可以是:public、private、protected、static和final。其中fi
5、nal用來(lái)說(shuō)明一個(gè)最終成員變量,在程序中不能修改該變量的值,因此該變量又稱為常量;static用來(lái)說(shuō)明類(lèi)靜態(tài)成員變量,類(lèi)變量在內(nèi)存中有共同的分配空間。第17頁(yè)/共150頁(yè)屬性 在一個(gè)類(lèi)中,定義在方法之外的變量稱為成員變量,成員變量的作用范圍是整個(gè)類(lèi),并且不受定義位置的影響。我們通常將成員變量的定義集中地放在類(lèi)體的開(kāi)始部分。第18頁(yè)/共150頁(yè)屬性 定義在方法之中的變量稱為局部變量,作用范圍是其所屬的方法。成員變量和局部變量的數(shù)據(jù)類(lèi)型可以是簡(jiǎn)單數(shù)據(jù)類(lèi)型或復(fù)雜數(shù)據(jù)類(lèi)型中的任何一種。第19頁(yè)/共150頁(yè)方法 方法用來(lái)規(guī)定類(lèi)屬性方面的操作,是類(lèi)的主要組成部分。應(yīng)用程序的類(lèi)由一個(gè)主方法和若干個(gè)子方法構(gòu)成
6、,主方法調(diào)用其他方法,其他方法間互相也可以調(diào)用,同一個(gè)方法可以被一個(gè)或多個(gè)方法調(diào)用多次。Java應(yīng)用程序中,程序的運(yùn)行從main()方法開(kāi)始,調(diào)用其他方法后又回到main()方法,在main()中結(jié)束整個(gè)程序的運(yùn)行。第20頁(yè)/共150頁(yè)方法 方法有兩種:一是標(biāo)準(zhǔn)方法,由Java API提供,可以實(shí)現(xiàn)許多功能;二是用戶自定義的方法,以實(shí)現(xiàn)專門(mén)的功能。 方法的定義格式為:第21頁(yè)/共150頁(yè)方法 修飾符 返回類(lèi)型 方法名(參數(shù)列表)throws 異常名 局部變量聲明 執(zhí)行語(yǔ)句 第22頁(yè)/共150頁(yè)方法 結(jié)果的返回類(lèi)型可以是簡(jiǎn)單數(shù)據(jù)類(lèi)型或復(fù)雜數(shù)據(jù)類(lèi)型中的任何一種。 方法名必須是合法的標(biāo)識(shí)符,方法的參
7、數(shù)項(xiàng)可以是缺省的、一個(gè)或者多個(gè),如果存在多個(gè)參數(shù),參數(shù)間使用逗號(hào)隔開(kāi)。第23頁(yè)/共150頁(yè)類(lèi)的定義-例1 1定義描述“人”的類(lèi):成員變量:姓名、性別、年齡;class PersonString name,sex;int age;void sing()void dance() void out()/成員變量的操作只能放在方法中注意:一個(gè)類(lèi)中可以沒(méi)有main方法,此時(shí)它不是Java的application應(yīng)用程序,也就是不能被Java虛擬機(jī)直接調(diào)用。成員方法:唱歌,跳舞,輸出第24頁(yè)/共150頁(yè)對(duì) 象 在Java中類(lèi)只有實(shí)例化為對(duì)象后才能被使用。 對(duì)象是在執(zhí)行過(guò)程中由其所屬的類(lèi)動(dòng)態(tài)產(chǎn)生的,一個(gè)類(lèi)可
8、以生成多個(gè)不同的對(duì)象。第25頁(yè)/共150頁(yè)創(chuàng)建和使用對(duì)象1 1、聲明對(duì)象 類(lèi)名 對(duì)象名;2 2、分配內(nèi)存(對(duì)象的實(shí)例化) 對(duì)象名=new =new 類(lèi)構(gòu)造方法名( 實(shí)參表 );3 3、使用對(duì)象(對(duì)象的成員變量及方法的訪問(wèn)) 對(duì)象名. .方法名、對(duì)象名. .成員變量名聲明和初始化可以合并:類(lèi)名 對(duì)象名=new =new 類(lèi)的構(gòu)造方法名( 實(shí)參表 );說(shuō)明:構(gòu)造方法名與類(lèi)名相同,如果一個(gè)類(lèi)中未定義構(gòu)造方法,系統(tǒng)自動(dòng)定義。第26頁(yè)/共150頁(yè)使用對(duì)象class Person.public static void main(String args)Person p;p=new Person();p.n
9、ame=zhangsan;p.age=20;p.sing();p.out();棧內(nèi)存堆內(nèi)存p 0 x30000 x30000 age.new person()產(chǎn)生的對(duì)象第27頁(yè)/共150頁(yè)對(duì)象的內(nèi)存模型 引用數(shù)據(jù)類(lèi)型與引用變量:引用數(shù)據(jù)類(lèi)型(數(shù)組、類(lèi))聲明的變量為引用變量,引用變量本身并不存放數(shù)據(jù),而只是存放數(shù)據(jù)的地址。 Java的內(nèi)存分配Java把內(nèi)存劃分成兩種:棧內(nèi)存、堆內(nèi)存1.Person p;聲明對(duì)象p時(shí),在棧內(nèi)存中分配空間,用來(lái)存放一個(gè)地址,此時(shí)地址未指向任何數(shù)據(jù)。第28頁(yè)/共150頁(yè)對(duì)象的內(nèi)存模型2.p=new Person();時(shí),調(diào)用的是構(gòu)造方法,首先在堆內(nèi)存中為對(duì)象分配存儲(chǔ)空
10、間,并對(duì)各成員變量進(jìn)行初始化,數(shù)值型為0,布爾型為false,引用型為null;然后取得這個(gè)存儲(chǔ)空間的地址(引用),將其“交給”引用變量p,以后對(duì)這個(gè)對(duì)象的操作全由p去控制。第29頁(yè)/共150頁(yè)對(duì)象的內(nèi)存模型3. 多次使用new便會(huì)創(chuàng)建多個(gè)不同的對(duì)象。 第30頁(yè)/共150頁(yè)對(duì)象的內(nèi)存模型第31頁(yè)/共150頁(yè)成員變量第32頁(yè)/共150頁(yè)第33頁(yè)/共150頁(yè) 棧內(nèi)存:保存的是對(duì)象的名字,局部變量 堆內(nèi)存:對(duì)象的具體內(nèi)容 數(shù)據(jù)區(qū):靜態(tài)屬性,常量第34頁(yè)/共150頁(yè)對(duì)象的引用 可以把內(nèi)存看做一棟樓房,而對(duì)象就是里面的一間房子。每個(gè)房間的門(mén)牌號(hào)相當(dāng)于對(duì)象所占內(nèi)存的存儲(chǔ)地址。當(dāng)使用關(guān)鍵字new來(lái)實(shí)例化每一
11、個(gè)對(duì)象時(shí),系統(tǒng)會(huì)為每一個(gè)成員變量分配一塊內(nèi)存空間,并返回這個(gè)對(duì)象的一個(gè)內(nèi)存地址引用(即“門(mén)牌號(hào)”)給這些成員變量,因此每個(gè)對(duì)象都能彼此獨(dú)立的引用成員變量。 第35頁(yè)/共150頁(yè)構(gòu)造函數(shù) 構(gòu)造函數(shù)的作用和定義 構(gòu)造函數(shù)也稱為構(gòu)造方法,用來(lái)對(duì)對(duì)象進(jìn)行初始化。 構(gòu)造函數(shù)的名字必須和類(lèi)名完全相同,并且沒(méi)有返回值,甚至連表示無(wú)返回值的空類(lèi)型(void)也沒(méi)有 。構(gòu)造函數(shù)一般應(yīng)定義為public。 第36頁(yè)/共150頁(yè)默認(rèn)構(gòu)造函數(shù) 一般而言,每個(gè)類(lèi)都至少有一個(gè)構(gòu)造函數(shù)。如果程序員沒(méi)有為類(lèi)定義構(gòu)造函數(shù),Java虛擬機(jī)會(huì)自動(dòng)為該類(lèi)生成一個(gè)默認(rèn)的構(gòu)造函數(shù)。 要特別注意的是,如果程序員定義了一個(gè)或多個(gè)構(gòu)造函數(shù),則
12、自動(dòng)屏蔽掉默認(rèn)的構(gòu)造函數(shù)。 第37頁(yè)/共150頁(yè)class Person int id;int age; Person(int n, int i) id = n;age = i; 第38頁(yè)/共150頁(yè)第39頁(yè)/共150頁(yè)閱讀代碼,畫(huà)出相應(yīng)的內(nèi)存圖 Test11.java第40頁(yè)/共150頁(yè)構(gòu)造函數(shù)課堂練習(xí) 第41頁(yè)/共150頁(yè)class Point class Point double x, y, z;double x, y, z;Point(double _x, double _y, double _z) Point(double _x, double _y, double _z) x =
13、_x;x = _x;y = _y;y = _y;z = _z;z = _z; void setX(double _x) void setX(double _x) x = _x;x = _x; double getDistance(Point p) double getDistance(Point p) return (x - p.x)return (x - p.x)* *(x - p.x) + (y - p.y)(x - p.x) + (y - p.y)* *(y - p.y) + (z - p.z)(y - p.y) + (z - p.z)* *(z - (z - p.z);p.z); pu
14、blic class TestPoint public class TestPoint public static void main(String args) public static void main(String args) Point p = new Point(1.0, 2.0, 3.0);Point p = new Point(1.0, 2.0, 3.0);Point p1 = new Point(0.0, 0.0, 0.0);Point p1 = new Point(0.0, 0.0, 0.0);p.setX(6.0);p.setX(6.0); 第42頁(yè)/共150頁(yè)習(xí) 題1.
15、1.按以下要求創(chuàng)建一個(gè)學(xué)生類(lèi)按以下要求創(chuàng)建一個(gè)學(xué)生類(lèi)(Student)(Student),編程并上機(jī)調(diào)試:編程并上機(jī)調(diào)試:1)1) 其成員變量其成員變量:姓名:姓名(name)(name)、年齡、年齡(age)(age)、身高、身高(height)(height)、體重體重(weight)(weight)2)2) 成員方法:成員方法:setAgesetAge用于給變量用于給變量ageage賦值賦值3)3) 成員方法(成員方法(outout):):輸出各成員變量的值。輸出各成員變量的值。4)4) 構(gòu)造方法:構(gòu)造方法:通過(guò)參數(shù)傳遞,分別對(duì)通過(guò)參數(shù)傳遞,分別對(duì)namename、heightheigh
16、t、weightweight初始化。初始化。5)5) 最后最后,創(chuàng)建這個(gè)類(lèi)的對(duì)象,并完成對(duì)成員變量賦值和輸,創(chuàng)建這個(gè)類(lèi)的對(duì)象,并完成對(duì)成員變量賦值和輸出的操作。出的操作。第43頁(yè)/共150頁(yè)引用變量的參數(shù)傳遞(引用傳參) 引用變量的參數(shù)傳遞中,用戶使用參數(shù)調(diào)用函數(shù)時(shí),傳遞給函數(shù)的參數(shù)是該實(shí)際參數(shù)本身,而不是實(shí)際參數(shù)值的副本。對(duì)引用參數(shù)的修改將會(huì)改變參數(shù)變量本身。 Java 是傳值還是傳引用,問(wèn)題主要出在對(duì)象的傳遞上,因?yàn)?Java 中簡(jiǎn)單類(lèi)型沒(méi)有引用。第44頁(yè)/共150頁(yè)引用變量的參數(shù)傳遞(引用傳參) 什么是引用 簡(jiǎn)單的說(shuō),引用其實(shí)就像是一個(gè)對(duì)象的名字或者別名 (alias),一個(gè)對(duì)象在內(nèi)存中
17、會(huì)請(qǐng)求一塊空間來(lái)保存數(shù)據(jù),根據(jù)對(duì)象的大小,它可能需要占用的空間大小也不等。訪問(wèn)對(duì)象的時(shí)候,不會(huì)直接訪問(wèn)對(duì)象在內(nèi)存中的數(shù)據(jù),而是通過(guò)引用去訪問(wèn)。第45頁(yè)/共150頁(yè)引用變量的參數(shù)傳遞(引用傳參) 什么是引用 可以把引用想象為類(lèi)似 C 語(yǔ)言中指針的東西,引用指示了對(duì)象在內(nèi)存中的地址只不過(guò)我們不能夠觀察到這個(gè)地址究竟是什么。第46頁(yè)/共150頁(yè)引用變量的參數(shù)傳遞(引用傳參) 如果我們定義了不止一個(gè)引用指向同一個(gè)對(duì)象,那么這些引用是不相同的,因?yàn)橐靡彩且环N數(shù)據(jù)類(lèi)型,需要一定的內(nèi)存空間來(lái)保存。但是它們的值是相同的,都指示同一個(gè)對(duì)象在內(nèi)存的中位置。第47頁(yè)/共150頁(yè)引用變量的參數(shù)傳遞(引用傳參) 比如
18、 StringBuffer a=new StringBuffer( Hello ) ;StringBuffer b= a;這里,a 和 b 是不同的兩個(gè)引用,我們使用了兩個(gè)定義語(yǔ)句來(lái)定義它們。但它們的值是一樣的,都指向同一個(gè)對(duì)象 “Hello”。 如果 b = new StringBuffer( “World”); b = a; 這種情況不是改變了 World 這一對(duì)象的值,而是改變了它的引用 b 的值使之指向了另一個(gè) StringBuffer對(duì)象 a。 第48頁(yè)/共150頁(yè)引用變量的參數(shù)傳遞(引用傳參)public class Test public static void main(Str
19、ing args) StringBuffer a = new StringBuffer(Hello); StringBuffer b = a; b.append(, World); 第49頁(yè)/共150頁(yè)引用變量的參數(shù)傳遞(引用傳參)運(yùn)行結(jié)果: a is Hello, World 這個(gè)例子中 a 和 b 都是引用,當(dāng)改變了 b 指示的對(duì)象的值的時(shí)候,從輸出結(jié)果來(lái)看,a 所指示的對(duì)象的值也改變了。所以,a 和 b 都指向同一個(gè)對(duì)象即包含 Hello 的一個(gè) StringBuffer 對(duì)象。這里有兩個(gè)要點(diǎn): 1、引用是一種數(shù)據(jù)類(lèi)型,保存了對(duì)象在內(nèi)存中的地址,這種類(lèi)型即不是我們平時(shí)所說(shuō)的簡(jiǎn)單數(shù)據(jù)類(lèi)型也
20、不是類(lèi)實(shí)例(對(duì)象); 2、不同的引用可能指向同一個(gè)對(duì)象,換句話說(shuō),一個(gè)對(duì)象可以有多個(gè)引用,即該類(lèi)類(lèi)型的變量。第50頁(yè)/共150頁(yè)引用變量的參數(shù)傳遞(引用傳參)public class Test public static void test(StringBuffer str) str.append(, World!); public static void main(String args) StringBuffer string = new StringBuffer(Hello); test(string); 第51頁(yè)/共150頁(yè)引用變量的參數(shù)傳遞 【例6-6】 值傳遞的應(yīng)用,注意x,y對(duì)應(yīng)
21、的值的變化(光盤(pán):源文件第6章例6-6.txt)。 類(lèi) “ T est5_4” 運(yùn) 行 結(jié) 果 第52頁(yè)/共150頁(yè)引用變量的參數(shù)傳遞 出現(xiàn)這種結(jié)果的主要原因是x.append(y),實(shí)際上是改變了x引用的內(nèi)容,由于a和x引用同一個(gè)對(duì)象,所以a的引用也會(huì)隨之改變。而y=x只是改變operate()中y的引用,這個(gè)是局部的,不會(huì)影響到main()中b的引用。第53頁(yè)/共150頁(yè)復(fù)習(xí) 類(lèi)的定義 成員變量說(shuō)明 成員方法說(shuō)明 對(duì)象的創(chuàng)建和使用 創(chuàng)建對(duì)象 通過(guò)對(duì)象引用成員變量和成員方法 構(gòu)造方法 構(gòu)造方法與一般成員方法的區(qū)別 P106,構(gòu)造方法不是void型第54頁(yè)/共150頁(yè)本講要點(diǎn) 方法的重載 成員
22、方法的重載 構(gòu)造方法的重載 Static this 繼承 重寫(xiě)第55頁(yè)/共150頁(yè)方法的重載 在一個(gè)類(lèi)中可以有多個(gè)方法具有相同的名字,但這些方法的參數(shù)必須不同,即或者是參數(shù)的個(gè)數(shù)不同,或者是參數(shù)的類(lèi)型不同。 同名的方法可以有不同的方法體從而完成不同的任務(wù),當(dāng)調(diào)用方法時(shí),系統(tǒng)會(huì)根據(jù)調(diào)用方法的實(shí)際參數(shù)類(lèi)型和個(gè)數(shù)自動(dòng)調(diào)用相應(yīng)的方法,這就是方法的重載。第56頁(yè)/共150頁(yè)方法的重載class Heshangvoid dashui(String s)挑水喝);void dashui(String s1,String s2)和+s2+抬水喝);void dashui(String s1,String s2
23、,String s3)沒(méi)水喝);public static void main(Stringargs) Heshang h=new Heshang(); h.dashui(孫悟空); h.dashui(孫悟空,豬八戒); h.dashui(孫悟空,豬八戒,沙和尚); 第57頁(yè)/共150頁(yè)方法的重載Test.java第58頁(yè)/共150頁(yè)構(gòu)造方法的重載(一)class PersonString name;int age;float height,weight;public Person()age=18;name=無(wú)名;public Person(String _name)name=name;pub
24、lic Person(String _name,int _age,float _height,float _weight)name=_name;age=_age;height=_height;weight=_weight;void out()/成員變量的操作只能放在方法中“姓名:”+name+“ 年齡:”+age+“歲”+ 身高: +height+米+ 體重:+weight+斤);第59頁(yè)/共150頁(yè)class PersonTestpublic static void main(String args)Person p1,p2,p3;p1=new Person();p2=new Person(
25、孫悟空);p3=new Person(豬八戒,300,2.8f,380);p1.out();p2.out();p3.out();構(gòu)造方法的重載(二)第60頁(yè)/共150頁(yè)構(gòu)造方法的重載TestOverLoad.java第61頁(yè)/共150頁(yè)thisthis關(guān)鍵字第62頁(yè)/共150頁(yè)thisthis關(guān)鍵字第63頁(yè)/共150頁(yè)第64頁(yè)/共150頁(yè)staticstatic 第65頁(yè)/共150頁(yè)staticstatic 類(lèi)成員屬于這個(gè)類(lèi)而不是屬于這個(gè)類(lèi)的某個(gè)對(duì)象,它由這個(gè)類(lèi)所創(chuàng)建的所有對(duì)象共同擁有。任何一個(gè)該類(lèi)的對(duì)象改變了類(lèi)成員,則對(duì)其他對(duì)象而言該類(lèi)成員會(huì)發(fā)生同樣的改變。第66頁(yè)/共150頁(yè)public
26、class Cat private static int sid = 0; private String name; int id; Cat(String name) = name; id = sid+; public void info() (My name is +name+ No.+id); public static void main(String arg) Cat.sid = 100; Cat mimi = new Cat(mimi); Cat pipi = new Cat(pipi); (); (); 第67頁(yè)/共150頁(yè)第
27、68頁(yè)/共150頁(yè)class Person String code ;String name ;int age ;String shout() return 地區(qū)編碼:+code+,姓名:+name+,年齡:+age ;class BeforeUseStaticpublic static void main(String args) Person p1 = new Person() ; Person p2 = new Person() ; p1.code = 120 ; = 李紅 ; p1.age = 20 ; p2.code = 120 ; = 李明 ; p2
28、.age = 30 ;第69頁(yè)/共150頁(yè) 假設(shè)所有對(duì)象的code相同,且均為”120”,上述代碼應(yīng)如何修改?static第70頁(yè)/共150頁(yè)staticstatic課堂閱讀并分析:P114 P114 例6.106.10、例6.116.11第71頁(yè)/共150頁(yè)繼承 繼承:由已有類(lèi)創(chuàng)建新類(lèi)的機(jī)制。新類(lèi)繼承已有類(lèi)的成員(全部屬性和方法),并可根據(jù)需要增加自己新的成員。已有類(lèi)稱為父類(lèi),新類(lèi)稱為已有類(lèi)的子類(lèi)。 Java中通過(guò)繼承實(shí)現(xiàn)代碼復(fù)用。 Java不支持多繼承,一個(gè)子類(lèi)只能有一個(gè)父類(lèi),但一個(gè)父類(lèi)可以派生出若干個(gè)子類(lèi)。第72頁(yè)/共150頁(yè)繼 承 繼承性是面向?qū)ο蟮幕咎匦灾?,利用繼承的原理可以高效
29、地創(chuàng)建具有各種特征的類(lèi)。使用繼承的一般步驟是:首先,創(chuàng)建一個(gè)基礎(chǔ)類(lèi)。然后,創(chuàng)建一個(gè)新類(lèi)來(lái)繼承該基礎(chǔ)類(lèi),則該新類(lèi)具有基礎(chǔ)類(lèi)的一般特征,接下來(lái),只需要向新類(lèi)中添加新的特征和行為。 第73頁(yè)/共150頁(yè)繼 承 被繼承的基礎(chǔ)類(lèi)又稱為父類(lèi),繼承了父類(lèi)的類(lèi)稱為子類(lèi)。Java語(yǔ)言只支持單繼承,不支持多繼承。 繼承的格式如下: class 子類(lèi)名 extends 父類(lèi)名 子類(lèi)名和父類(lèi)名必須是合法的標(biāo)識(shí)符。第74頁(yè)/共150頁(yè)繼承使用示例class Base public string BaseString;class Derive extends Base public string DeriveString
30、;在這個(gè)例子中,基類(lèi)Base中有一個(gè)名為BaseString的字段,而派生類(lèi)Derive中除含有其自身定義的DeriveString外,還包含從基類(lèi)中繼承來(lái)的BaseString字段。第75頁(yè)/共150頁(yè)繼 承108頁(yè)代碼子類(lèi)Manager具有父類(lèi)Employee擁有的所有變量和方法,并且這些變量和方法都是從父類(lèi)定義中繼承過(guò)來(lái)的,子類(lèi)中只需要定義新增的變量和方法如果在Employee類(lèi)中進(jìn)行修改,那么,Manager類(lèi)就會(huì)自動(dòng)修改,除了對(duì)它進(jìn)行編譯。而不需要開(kāi)發(fā)人員做任何工作,這樣能提高開(kāi)發(fā)的可靠性和效率。第76頁(yè)/共150頁(yè)繼承 TestPerson.java第77頁(yè)/共150頁(yè)繼 承cla
31、ss A int i, j; void showij() class B extends A int k; void showk() void sum() 第78頁(yè)/共150頁(yè)class SimpleInheritance public static void main(String args) A superOb = new A(); B subOb = new B();superOb.i = 10; superOb.j = 20;superOb.showij(); subOb.i = 7; subOb.j = 8; subOb.k = 9; subOb.showij();subOb.sho
32、wk(); 第79頁(yè)/共150頁(yè)繼 承該程序的輸出如下:Contents of superOb:i and j: 10 20 Contents of subOb: i and j: 7 8k: 9 Sum of i, j and k in subOb:i+j+k: 24 子類(lèi)B包括它的超類(lèi)A中的所有成員。這就是為什么subOb 可以獲取i和j 以及調(diào)用showij( ) 方法的原因。同樣,sum( ) 內(nèi)部,i和j可以被直接引用。第80頁(yè)/共150頁(yè)繼 承 【例6-7】 定義一個(gè)汽車(chē)類(lèi)car作為父類(lèi),子類(lèi)saloon_car,saloon_car繼承并調(diào)用了car類(lèi)的變量和方法(光盤(pán):源文件第
33、6章例6-7.txt)。 類(lèi)“car”運(yùn)行結(jié)果 第81頁(yè)/共150頁(yè)繼 承 繼承同樣會(huì)受到類(lèi)的修飾符的限制(參閱表6-3)。子類(lèi)的繼承性如下。 同一個(gè)包中的父類(lèi),但不可以繼承和訪問(wèn)被private修飾的成員變量以及方法。 非同一個(gè)包中父類(lèi)的protected、public修飾的成員變量以及方法可以繼承和訪問(wèn)。第82頁(yè)/共150頁(yè)繼 承盡管子類(lèi)包括超類(lèi)的所有成員,但子類(lèi)不能訪問(wèn)超類(lèi)中被聲明成private 的成員。 第83頁(yè)/共150頁(yè)繼 承 注意:一個(gè)被定義成private 的類(lèi)成員為此類(lèi)私有,它不能被該類(lèi)外的所有代碼訪問(wèn),括子類(lèi)。 繼承的一個(gè)主要優(yōu)勢(shì)在于一旦你已經(jīng)創(chuàng)建了一個(gè)超類(lèi),并且該超類(lèi)定
34、義了適用于一組對(duì)象的屬性,創(chuàng)建子類(lèi)來(lái)說(shuō)明更多細(xì)節(jié)。 一旦已經(jīng)創(chuàng)建了一個(gè)定義了對(duì)象一般屬性的超類(lèi),該超類(lèi)可以被繼承以生成特殊用途的類(lèi)。每一個(gè)子類(lèi)只增添它自己獨(dú)特的屬性。這是繼承的本質(zhì)。第84頁(yè)/共150頁(yè)繼承 子類(lèi)和父類(lèi)在同一包中 子類(lèi)可繼承其父類(lèi)中非私有成員(不是private的成員) 子類(lèi)和父類(lèi)不在同一包中 子類(lèi)只能繼承受保護(hù)的和共有成員(public、protected)第85頁(yè)/共150頁(yè)繼 承、構(gòu)造方法 盡管一個(gè)子類(lèi)從父類(lèi)繼承所有的方法和變量,但它不繼承構(gòu)造方法,這一點(diǎn)要特別注意。要得到構(gòu)造方法,可以通過(guò)編寫(xiě)構(gòu)造方法,或者使用類(lèi)的缺省構(gòu)造方法。第86頁(yè)/共150頁(yè)繼承public cl
35、ass Person String name; int age; public void setAge(int age) this.age=age; public void out() 姓名:+name+ 年齡:+age+歲); 第87頁(yè)/共150頁(yè)子類(lèi)public class Student extends Person int java,flash; void learn() void outStudent() tflash:+flash); public static void main(Stringargs) Student s=new Student(); =孫悟空; s
36、.age=600;s.java=80;s.flash=86; s.learn(); s.outStudent();s.out(); 第88頁(yè)/共150頁(yè)方法的重寫(xiě) 方法的重寫(xiě):如果子類(lèi)中定義了與父類(lèi)同名、同類(lèi)型、相同參數(shù)、相同返回值類(lèi)型的方法,則稱子類(lèi)覆蓋了父類(lèi)的方法。 這是子類(lèi)的一種“變異”,子類(lèi)可以根據(jù)需要把從父類(lèi)繼承來(lái)的方法進(jìn)行改造。重寫(xiě)方法不能使用比被重寫(xiě)方法更嚴(yán)格的訪問(wèn)權(quán)限。第89頁(yè)/共150頁(yè)方法的重寫(xiě) TestOverWrite.java第90頁(yè)/共150頁(yè)SuperSuper關(guān)鍵字關(guān)鍵字supersuper,提供了對(duì)父類(lèi)的訪問(wèn)。1.1.可以使用supersuper訪問(wèn)父類(lèi)被子類(lèi)
37、隱藏的變量或覆蓋的方法。2 2、可以通過(guò)Super(Super(參數(shù)表)來(lái)調(diào)用父類(lèi)中特定的構(gòu)造方法。即根據(jù)super( )super( )傳入的參數(shù)去調(diào)用父類(lèi)中指定的構(gòu)造方法,默認(rèn)情況下調(diào)用的是無(wú)參構(gòu)造方法。第91頁(yè)/共150頁(yè)/父類(lèi)class FatherClass class FatherClass public int value; public int value; public void f() public void f() value = 100; value = 100; (FatherClass.value=+value); (FatherClass.value=+value
38、); /子類(lèi)class ChildClass extends FatherClass class ChildClass extends FatherClass public int value; public int value; public void f() public void f() super.f(); super.f(); value = 200; value = 200; (ChildClass.value=+value); (ChildClass.value=+value); 第92頁(yè)/共150頁(yè)public class TestInherit public static v
39、oid main(String args) ChildClass cc = new ChildClass();cc.f();驗(yàn)證第93頁(yè)/共150頁(yè)內(nèi)存分析第94頁(yè)/共150頁(yè)繼承中的構(gòu)造方法第95頁(yè)/共150頁(yè)繼承中的構(gòu)造方法 舉例驗(yàn)證 TestSuperSub.javaclass SuperClass private int n; /* SuperClass() */ SuperClass(int n) this.n = n; 第96頁(yè)/共150頁(yè)class SubClass extends SuperClass private int n; SubClass(int n) /super(
40、); this.n = n; SubClass() super(300); 第97頁(yè)/共150頁(yè)繼承中的構(gòu)造方法public class TestSuperSub public static void main(String arg) SubClass sc1 = new SubClass(); SubClass sc2 = new SubClass(400); 第98頁(yè)/共150頁(yè) 1注釋super(300);檢測(cè)第一點(diǎn)說(shuō)明 2. super必須在第一行,檢測(cè)第二點(diǎn)說(shuō)明 3.測(cè)試 SubClass sc2 = new SubClass(400);檢測(cè)第三點(diǎn)說(shuō)明 4.注釋SuperClass(
41、),檢測(cè)第四點(diǎn)說(shuō)明第99頁(yè)/共150頁(yè)課堂練習(xí):分析輸出結(jié)果和程序的構(gòu)造過(guò)程第100頁(yè)/共150頁(yè)繼承中的構(gòu)造方法 運(yùn)行結(jié)果:A()B()B:f()第101頁(yè)/共150頁(yè)例:分析輸出結(jié)果和程序的構(gòu)造過(guò)程:TestStudent.java/定義父類(lèi)Personclass Person private String name; private String location; Person(String name) = name; location = beijing; Person(String name,String location) = name;
42、this.location = location; public String info() return name: +name+ location: +location; 第102頁(yè)/共150頁(yè)例:分析輸出結(jié)果和程序的構(gòu)造過(guò)程TestStudent.java/定義子類(lèi)Studentclass Student extends Person private String school; Student(String name,String school) this(name,beijing, school); Student(String n,String l,String school) s
43、uper(n,l); this.school = school; public String info() return ()+ school: +school; 第103頁(yè)/共150頁(yè)例:分析輸出結(jié)果和程序的構(gòu)造過(guò)程TestStudent.java/定義類(lèi)testStudentpublic class TestStudent public static void main(String args) Person p1 = new Person(A); Person p2 = new Person(B,shanghai); Student s1 = new Student(
44、C,S1); Student s2 = new Student(C,shanhai,S2); 第104頁(yè)/共150頁(yè)多態(tài) 面向?qū)ο蟮囊粋€(gè)重要特征之一,多態(tài)性,體現(xiàn)在兩個(gè)方面:方法的重載和方法的重寫(xiě)。 多態(tài)是采用同名的方法獲得不同的行為特性。 在面向?qū)ο蟮某绦蛟O(shè)計(jì)中采用多態(tài),可以簡(jiǎn)化程序設(shè)計(jì)的復(fù)雜度。第105頁(yè)/共150頁(yè)繼承和多態(tài)面向?qū)ο蟪绦蛟O(shè)計(jì)的另外兩個(gè)重要的特點(diǎn)是繼承和多態(tài)。它們是面向?qū)ο缶幊讨?,?shí)現(xiàn)代碼復(fù)用的關(guān)鍵技術(shù)。繼承是面向?qū)ο蠓椒ㄖ幸粋€(gè)十分重要的概念,并且是提高軟件開(kāi)發(fā)效率的重要原因之一。多態(tài)能夠提高類(lèi)的抽象性和封裝性,改善程序的組織架構(gòu)和可讀性。 第106頁(yè)/共150頁(yè)包的概念為
45、了便于管理大型軟件系統(tǒng)中數(shù)目眾多的類(lèi),解決類(lèi)命名沖突的問(wèn)題,java引入了包。Java中的包與文件系統(tǒng)的目錄層次結(jié)構(gòu)是一一對(duì)應(yīng)的。一個(gè)包中可以包含子包,包名與子包名間用“”分隔。Java提供的類(lèi)和接口是按不同的用途分別放在不同的包中。java.util第107頁(yè)/共150頁(yè)package 語(yǔ)句功能:創(chuàng)建包格式:package 包名.子包名;要求:此語(yǔ)句必須放在整個(gè)源程序第一條語(yǔ)句例:package p;/(在當(dāng)前目錄下創(chuàng)建一個(gè)p包) package a.b;/(在當(dāng)前目錄下創(chuàng)建a,在a下再創(chuàng)建b)注意:嵌套的包名之間以圓點(diǎn)分隔(“.”)。如果源文件中省略了package語(yǔ)句,則文件中定義的類(lèi)隱
46、含在一個(gè)無(wú)名包中,這個(gè)無(wú)名包就是源文件所在的位置。第108頁(yè)/共150頁(yè)引入javajava包中的類(lèi)和接口importimport語(yǔ)句一般情況下import語(yǔ)句緊跟在package語(yǔ)句之后功能:將其他包中的類(lèi)引入到當(dāng)前程序中。格式:import 帶包層次結(jié)構(gòu)的類(lèi)名;說(shuō)明:1、引入包時(shí),類(lèi)名可以使用通配符“*”,表示包模塊中某個(gè)層次的類(lèi)全引入進(jìn)來(lái)。例:2、java會(huì)自動(dòng)引入lang包下的所有類(lèi)和接口。3、前綴包名法:不用import語(yǔ)句也可以引入其他包中的類(lèi)和接口。則必須有完整的包名和類(lèi)名(接口),即:包名.類(lèi)名(接口名)第109頁(yè)/共150頁(yè)包的建立和包的引用舉例首先,創(chuàng)建一個(gè)包a1,然后,創(chuàng)
47、建一個(gè)PackageExample類(lèi),最后該類(lèi)引用了包a1 1.打開(kāi)記事本,輸入如下代碼: package a1;public class DefiPackage public void display() public static void main(String args)類(lèi) 在 a1包中 );第110頁(yè)/共150頁(yè) 2.保存在f:javatest目錄下,文件名為DefiPackage.java 3.編譯 方法一:1.javac DefiPackage.java 2.手工建立包,將編譯出來(lái)的DefiPackage.class文件放在f:javatesta1下面,即和包中層次一樣。 (太麻
48、煩!)包的建立和包的引用舉例第111頁(yè)/共150頁(yè) 3.編譯 方法二:1.javac -d. DefiPackage.java (說(shuō)明:代表一個(gè)空格,-d:表示生成一個(gè)文件夾,文件夾的名稱是package定義的名稱, . 表示在當(dāng)前文件夾下保存生成的文件。 )包的建立和包的引用舉例第112頁(yè)/共150頁(yè) 4查看DefiPackage.class文件是否放在f:javatesta1下面 6.運(yùn)行該程序時(shí)必須到a1的上層,即f:javatest下運(yùn)行,輸入命令: java a1. DefiPackage.class (即執(zhí)行一個(gè)類(lèi)必須寫(xiě)全包名)6.在另外一個(gè)文件中輸入如下代碼:包的建立和包的引用舉
49、例第113頁(yè)/共150頁(yè)import a1.DefiPackage;public class PackageExample public static void main(String args) DefiPackage t=new DefiPackage();t.display();包的建立和包的引用舉例第114頁(yè)/共150頁(yè)7.保存在f:javatest目錄下,文件名為PackageExample.java8.編譯并運(yùn)行該程序。包的建立和包的引用舉例第115頁(yè)/共150頁(yè)課堂提問(wèn):若PackageExample.java中刪除import a1.DefiPackage;語(yǔ)句,但我們又希望仍
50、能正確引用包a1中的DefiPackage類(lèi), PackageExample.java如何修改?包的建立和包的引用舉例第116頁(yè)/共150頁(yè)訪問(wèn)權(quán)限第117頁(yè)/共150頁(yè)訪問(wèn)權(quán)限 用一個(gè)類(lèi)創(chuàng)建一個(gè)對(duì)象后,通過(guò)對(duì)象可以訪問(wèn)這個(gè)類(lèi)的成員變量和成員方法,但這種訪問(wèn)是有一定限制的。 這種限制取決于在聲明變量和成員方法時(shí)使用的修飾符:public、private、protected、友好(未使用修飾符)。第118頁(yè)/共150頁(yè)private變量和方法(一) 訪問(wèn)權(quán)限最小,只能在同一個(gè)類(lèi)中被訪問(wèn)。class T private int i=0; int j=0; protected int k=0; pu
51、blic int m=0;public class TestAccess public static void main(String args) T t=new T();/非法使用變量i 第119頁(yè)/共150頁(yè)思考1.若改為編譯是否出錯(cuò)?1.若改為編譯是否出錯(cuò)?1.若改為編譯是否出錯(cuò)?第120頁(yè)/共150頁(yè)public變量和方法 訪問(wèn)權(quán)限最大,可以在不同類(lèi)、不同包的類(lèi)中訪問(wèn)。第121頁(yè)/共150頁(yè)友好變量和方法 不使用修飾符:public、private、protected,即缺省這些修飾符的情況。 比private權(quán)限級(jí)別高一級(jí) 友好成員只能被同類(lèi)或同包中的不同類(lèi)引用。第122頁(yè)/共150
52、頁(yè)protected變量和方法 比友好成員高一級(jí),比public低一級(jí)。 不能在不同包的類(lèi)中被引用。 如果不同包中的類(lèi)是本類(lèi)的子類(lèi),則子類(lèi)的對(duì)象可以引用本類(lèi)的受保護(hù)成員。第123頁(yè)/共150頁(yè)方法的訪問(wèn)控制(總結(jié))publicprotected友好private同類(lèi)同包不同類(lèi)不同包子類(lèi)通用不同情形下對(duì)象第124頁(yè)/共150頁(yè)finalfinal類(lèi)和finalfinal成員 final類(lèi):不能派生子類(lèi),即不能被繼承。 final變量,其值不能在程序運(yùn)行過(guò)程中改變,是常量。 final方法,不能被子類(lèi)方法重寫(xiě)。第125頁(yè)/共150頁(yè)finalfinal舉例public class TestFina
53、l public static void main(String args) T t = new T();/t.i= 8; /錯(cuò)誤 final變量不能被改寫(xiě)final class T final int i = 8;public final void m() class TT extends T /錯(cuò)誤 final類(lèi)不能被繼承第126頁(yè)/共150頁(yè)對(duì)象的上轉(zhuǎn)型第127頁(yè)/共150頁(yè)對(duì)象的上轉(zhuǎn)型Person p;p=new Student();Student s;s=new Student();p=s;新增變量新增方法從父類(lèi)繼承或重寫(xiě)的變量從父類(lèi)繼承或重寫(xiě)的方法 s的上轉(zhuǎn)型對(duì)象S對(duì)象ps第128頁(yè)/共150頁(yè)對(duì)象上轉(zhuǎn)型 上轉(zhuǎn)型對(duì)象可通過(guò)強(qiáng)制類(lèi)型轉(zhuǎn)換成為子類(lèi)對(duì)象。第129頁(yè)/共150頁(yè)對(duì)象上轉(zhuǎn)型舉例一(1)第130頁(yè)/共150頁(yè)對(duì)象上轉(zhuǎn)型舉例一(2)第131頁(yè)/共150頁(yè)內(nèi)存分析第132頁(yè)/共150頁(yè)對(duì)象上轉(zhuǎn)型舉例二第133頁(yè)/共150頁(yè)對(duì)象上轉(zhuǎn)型小結(jié) 父類(lèi)引用可指向子類(lèi)對(duì)象,方法中的參數(shù)定義為父類(lèi)對(duì)象引用,實(shí)際傳遞的是子類(lèi)對(duì)象,再去判斷是哪個(gè)子類(lèi),從而去執(zhí)行其方法和成員變量,從而實(shí)現(xiàn)程序的擴(kuò)展性。第134頁(yè)/共150頁(yè)多態(tài) 多態(tài)是面向?qū)ο蟪绦蛟O(shè)計(jì)的又一重要特性。在ja
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 玉溪師范學(xué)院《數(shù)學(xué)分析(榮譽(yù))(Ⅰ)》2023-2024學(xué)年第一學(xué)期期末試卷
- 襄陽(yáng)職業(yè)技術(shù)學(xué)院《建筑實(shí)訓(xùn)》2023-2024學(xué)年第一學(xué)期期末試卷
- 杭州師范大學(xué)《影音制作》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025年挖掘機(jī)行業(yè)前瞻:2月銷(xiāo)量同比增52.8%基建回暖推動(dòng)市場(chǎng)增長(zhǎng)
- 主要分部分項(xiàng)施工方案
- 預(yù)制蓋板涵施工方案
- 灌縫膠施工方案
- 光學(xué)測(cè)試試題及答案高一
- 6年級(jí)寫(xiě)作第3單元冬日暖陽(yáng)怎么寫(xiě)
- 6n.m的螺絲鎖付扭矩
- 設(shè)計(jì)變更單表格
- 良性前列腺增生診療指南
- 中學(xué)生食品安全教育 主題班會(huì)課件(18張PPT) 上學(xué)期
- 《長(zhǎng)方形和正方形》 完整版課件
- 《乘法交換律和結(jié)合律》教學(xué)課件數(shù)學(xué)四年級(jí)下冊(cè)
- 趣味數(shù)學(xué)-高斯求和 完整版課件
- 花卉生產(chǎn)設(shè)施課件
- 高中體育與健康人教版高中必修全一冊(cè)(新課標(biāo))第十章體操類(lèi)運(yùn)動(dòng)-技巧模塊計(jì)劃
- 云南省主要礦產(chǎn)資源
- 臨床試驗(yàn)疑難問(wèn)題解答
- 光伏發(fā)電工程施工組織設(shè)計(jì)施工工程光伏發(fā)電工程光伏發(fā)電施工組織設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論