Java程序設(shè)計(jì)第6章-繼承_第1頁(yè)
Java程序設(shè)計(jì)第6章-繼承_第2頁(yè)
Java程序設(shè)計(jì)第6章-繼承_第3頁(yè)
Java程序設(shè)計(jì)第6章-繼承_第4頁(yè)
Java程序設(shè)計(jì)第6章-繼承_第5頁(yè)
已閱讀5頁(yè),還剩27頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第6章 繼承知識(shí)點(diǎn)回顧面向?qū)ο蟮幕靖拍蠲嫦驅(qū)ο笏枷雽?duì)象和類(lèi)的關(guān)系類(lèi)之間的關(guān)系面向?qū)ο蟮奶卣鞣庋b繼承多態(tài)對(duì)象的創(chuàng)建、使用、銷(xiāo)毀構(gòu)造方法2本講目標(biāo)static與final關(guān)鍵字繼承繼承的概念、特征及優(yōu)點(diǎn)訪(fǎng)問(wèn)修飾符對(duì)類(lèi)成員的訪(fǎng)問(wèn)限制this與super關(guān)鍵字 3static與final關(guān)鍵字 static關(guān)鍵字static修飾的變量叫靜態(tài)變量static修飾的方法叫靜態(tài)方法static修飾的代碼塊叫靜態(tài)代碼塊編寫(xiě)一個(gè)國(guó)家類(lèi),要求該類(lèi)中有一個(gè)變量用來(lái)統(tǒng)計(jì)該類(lèi)實(shí)例化了幾個(gè)中國(guó)人對(duì)象4static與final關(guān)鍵字 靜態(tài)變量 static修飾的變量,又稱(chēng)為類(lèi)變量語(yǔ)法: static 數(shù)據(jù)類(lèi)型 變量名;

2、特征:靜態(tài)變量屬于某個(gè)類(lèi),被所有實(shí)例所共享類(lèi)變量?jī)H在生成第一個(gè)對(duì)象時(shí)分配內(nèi)存,所有實(shí)例對(duì)象共享同一個(gè)類(lèi)變量,每個(gè)實(shí)例對(duì)象對(duì)類(lèi)變量的改變都會(huì)影響到其它的實(shí)例對(duì)象??梢酝ㄟ^(guò)類(lèi)名方式或者實(shí)例名方式訪(fǎng)問(wèn)不能被this和super訪(fǎng)問(wèn)5class Chinese static int count=0; public class Test public static void main(String args) for(int i=0;i3;i+) Chinese chinese=new Chinese(); chinese.count=chinese.count+1; System.out.printl

3、n(Chinese.count);/通過(guò)類(lèi)名訪(fǎng)問(wèn)靜態(tài)變量 6使用靜態(tài)變量static與final關(guān)鍵字 static方法 static修飾的方法,又成為類(lèi)方法語(yǔ)法: 訪(fǎng)問(wèn)修飾符 static 返回?cái)?shù)據(jù)類(lèi)型 方法名(參數(shù)列表) 方法體;特征:類(lèi)方法不能訪(fǎng)問(wèn)實(shí)例變量,只能訪(fǎng)問(wèn)類(lèi)變量或類(lèi)方法。 類(lèi)方法可以由類(lèi)名直接調(diào)用,也可由實(shí)例對(duì)象進(jìn)行調(diào)用,但不規(guī)范。 78使用靜態(tài)方法class Chinese static int count=0; static void display() System.out.println(“count= ”+count); public class Test publi

4、c static void main(String args) for(int i=0;i3;i+) Chinese chinese=new Chinese(); chinese.count=chinese.count+1; Chinese.display();/通過(guò)類(lèi)名訪(fǎng)問(wèn)靜態(tài)方法 static與final關(guān)鍵字 靜態(tài)代碼塊特征:靜態(tài)代碼塊不存在于任何方法體中類(lèi)中的靜態(tài)代碼塊被自動(dòng)執(zhí)行,盡管我們產(chǎn)生了類(lèi)的多個(gè)實(shí)例對(duì)象,但其中的靜態(tài)代碼塊只被執(zhí)行了一次。當(dāng)JAVA虛擬機(jī)加載類(lèi)時(shí)被載入,靜態(tài)代碼塊被執(zhí)行,靜態(tài)塊經(jīng)常用來(lái)進(jìn)行類(lèi)屬性的初始化。 910使用靜態(tài)代碼塊class StaticBlockD

5、emo static int values=new int10; static for(int i=0;ivalues.length;i+) valuesi=(int)(100.0*Math.random(); static與final關(guān)鍵字 final關(guān)鍵字final修飾類(lèi):是最終類(lèi),不能被其他類(lèi)所繼承 public final class String final修飾變量:(成員變量或局部變量)即為常量,只能賦值一次,只能訪(fǎng)問(wèn),不能修改其值。而且通常變量名用大寫(xiě)字母。如: public static final int INCREMENT=5final修飾成員方法:是最終方法,不能被子類(lèi)重

6、寫(xiě)。 public final void display();11繼承生活中的繼承動(dòng)物食草動(dòng)物食肉動(dòng)物誰(shuí)是父類(lèi)?誰(shuí)是子類(lèi)?能說(shuō)出繼承的特點(diǎn)嗎?繼承需要符合的關(guān)系:is-a,父類(lèi)更通用、子類(lèi)更具體12生活中的繼承(續(xù))子類(lèi)具有父類(lèi)的一般特性(包括屬性和行為),以及自身特殊的特性汽車(chē)巴士是汽車(chē)嗎?卡車(chē)是汽車(chē)嗎?出租車(chē)是汽車(chē)嗎?最大載客數(shù)量報(bào)站引擎數(shù)量外觀顏色剎車(chē)加速最大載重量卸貨所屬公司最大載客數(shù)量打發(fā)票屬性行為請(qǐng)問(wèn):出租車(chē)包含哪些屬性和行為呢?13汽車(chē)小轎車(chē)卡車(chē)客車(chē)?yán)^承繼承繼承輪船交通工具繼承繼承基類(lèi)和派生類(lèi)基類(lèi)和派生類(lèi)的概念是相對(duì)的,一個(gè)類(lèi)既可以是基類(lèi),也可以是派生類(lèi)14為什么需要繼承描述兩種

7、動(dòng)物羊Sheep和狼Wolf ,各自的要求如下:Sheep屬性:名稱(chēng),重量方法:吃飯(吃草)、睡覺(jué)、呼吸、動(dòng)物描述 Wolf屬性:名稱(chēng),重量方法:吃飯(吃肉)、睡覺(jué)、呼吸、動(dòng)物描述15為什么需要繼承(續(xù))以下這個(gè)解決方案中存在著什么問(wèn)題?public class Sheep private String name;/ 名稱(chēng)private int weight;/ 重量public Sheep(String sname, int sweight) name= sname;weight = sweight;public void eat() System.out.println (Im hungr

8、y);System.out.println(I like to eat grass);public void sleep() System.out.println(Im sleeping);public void breathe() System.out.println(Im breathing);public void info()System.out.println(Hi,Im a “+name);System.out.println(My weigth is+weight);16為什么需要繼承(續(xù))public class Wolfprivate String name;/ 名稱(chēng)priv

9、ate int weight;/ 重量public Wolf(String sname, int sweight) name= sname;weight = sweight;public void eat() System.out.println(Im hungry);System.out.println(I like to eat meat);public void sleep() System.out.println(Im sleeping);public void breathe() System.out.println(Im breathing);public void info()S

10、ystem.out.println(Hi,Im a “+name);System.out.println(My weigth is+weight);17為什么需要繼承(續(xù))存在的問(wèn)題兩段代碼存在重復(fù)18為什么需要繼承(續(xù))如何改進(jìn)?有沒(méi)有可能建立繼承關(guān)系,讓子類(lèi)自動(dòng)繼承父類(lèi)的屬性和方法?Sheep是動(dòng)物嗎?Wolf是動(dòng)物嗎?屬性行為名稱(chēng)重量吃飯睡覺(jué)呼吸描述動(dòng)物SheepWolf19JAVA中的繼承語(yǔ)法 class subclass-name extends superclass-name /類(lèi)體 特征父類(lèi)通用,它具有更一般的特征和行為,較為抽象。子類(lèi)具體,它除了具有父類(lèi)的特征和行為之外,還具有

11、自己的特征和行為在繼承關(guān)系中,父類(lèi)和子類(lèi)必須滿(mǎn)足is-a的關(guān)系。父類(lèi)叫基類(lèi)、超類(lèi),子類(lèi)叫派生類(lèi)。如果子類(lèi)沒(méi)有寫(xiě)extends,則默認(rèn)該子類(lèi)的父類(lèi)為ObjectJava中只支持單繼承子類(lèi)不能繼承父類(lèi)中訪(fǎng)問(wèn)權(quán)限為private的成員變量和方法。20優(yōu)點(diǎn)通過(guò)繼承,能夠復(fù)用原有代碼,節(jié)省編程時(shí)間,并能夠減少程序代碼出錯(cuò)的可能性。在JAVA編程語(yǔ)言中,通過(guò)繼承可利用已有的類(lèi),并擴(kuò)展它的屬性和方法。這個(gè)已有的類(lèi)可以是語(yǔ)言本身提供的或其他程序員編寫(xiě)的。JAVA中所有的類(lèi)(包括我們自己定義的類(lèi))都是直接或間接繼承自java.lang.Object類(lèi)。21JAVA中的繼承定義父類(lèi)Animal及其子類(lèi)Sheep、

12、Wolf類(lèi)public class Animal private String name;/名稱(chēng) private int weight;/重量 public Animal(String sname,int sweight) name = sname; weight =sweight; public void eat() System.out.println(Im hungry); public void sleep() System.out.println(Im sleeping); public void breathe() System.out.println(Im breathing);

13、 public void info()System.out.println(Hi,Im a +name);System.out.println(My weigth is+weight); 現(xiàn)在,所有子類(lèi)中相同的代碼都抽取到父類(lèi)中了 22public class Sheep extends Animal public Sheep (String sname, int sweight) super(sname,sweight); public void eat()System.out.println(I like to eat grass);public class Wolf extends An

14、imal public Wolf (String sname, int sweight) super(sname,sweight);public void eat()System.out.println(I like to eat meat);子類(lèi)自動(dòng)繼承父類(lèi)的屬性和方法,子類(lèi)中不再存在重復(fù)代碼由于eat()方法與父類(lèi)的實(shí)現(xiàn)有所不同,因此重寫(xiě)了該方法 23Lab6_1:編寫(xiě)一個(gè)應(yīng)用程序,設(shè)計(jì)一個(gè)汽車(chē)類(lèi) Vehicle,包含的屬性有車(chē)輪個(gè)數(shù) wheels和車(chē)重weight。小車(chē)類(lèi)Car 是Vehicle 的子類(lèi),其中包含的屬性有載人數(shù) loader。卡車(chē)類(lèi) Truck 是Car類(lèi)的子類(lèi),其中包含

15、的屬性有載重量 payload。每個(gè)類(lèi)都有構(gòu)造方法和輸出相關(guān)數(shù)據(jù)的方法 。編寫(xiě)測(cè)試類(lèi)CarTest進(jìn)行測(cè)試。24JAVA中的繼承訪(fǎng)問(wèn)修飾符對(duì)類(lèi)成員的訪(fǎng)問(wèn)限制25訪(fǎng)問(wèn)修飾符訪(fǎng)問(wèn)權(quán)限private缺省的(default)protectedpublic當(dāng)前類(lèi)同一包中的類(lèi)(和繼承無(wú)關(guān)系)不同包中的子類(lèi)任何類(lèi)this與super關(guān)鍵字 thisJava中為解決變量的命名沖突和不確定性問(wèn)題,引入關(guān)鍵字“this”代表其所在方法的當(dāng)前對(duì)象。每個(gè)成員方法內(nèi)部,都有一個(gè)this引用變量,指向調(diào)用這個(gè)方法的對(duì)象,類(lèi)中的成員方法與this之間的關(guān)系如圖:26this與super關(guān)鍵字 this語(yǔ)法this(參數(shù)列表

16、):調(diào)用其他的構(gòu)造函數(shù)this.屬性名:調(diào)用本對(duì)象的屬性this.方法:調(diào)用本對(duì)象的方法this特征this不能在static上下文中使用可以在構(gòu)造方法里調(diào)用其他重載的構(gòu)造方法,采用this(參數(shù)列表)的形式,根據(jù)其中的參數(shù)列表,選擇相應(yīng)的構(gòu)造方法。使用this調(diào)用構(gòu)造方法時(shí)必須也只能放在構(gòu)造方法的第一行。27public class Animal private String name;/名稱(chēng) private int weight;/重量 public Animal(String name,int weight) =name; this.weight=weight; pub

17、lic void eat() System.out.println(Im hungry); public void sleep() System.out.println(Im sleeping); public void breathe() System.out.println(Im breathing); public void info()System.out.println(Hi,Im a +name);System.out.println(My weigth is+weight); 28this與super關(guān)鍵字 superjava中通過(guò)super來(lái)實(shí)現(xiàn)對(duì)父類(lèi)成員的訪(fǎng)問(wèn),super用來(lái)引用當(dāng)前對(duì)象的父類(lèi)。每個(gè)子類(lèi)構(gòu)造方法的第一句,都隱含了調(diào)用super()。語(yǔ)法:super(參數(shù)列表):調(diào)用父類(lèi)的構(gòu)造函數(shù)super.屬性名:調(diào)用子類(lèi)繼承的父類(lèi)屬性super.方法:調(diào)用子類(lèi)繼承的構(gòu)造方法2930pub

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論