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ō)明:本文檔由用戶提供并上傳,收益歸屬內(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ì)象和類的關(guān)系類之間的關(guān)系面向?qū)ο蟮奶卣鞣庋b繼承多態(tài)對(duì)象的創(chuàng)建、使用、銷毀構(gòu)造方法2本講目標(biāo)static與final關(guān)鍵字繼承繼承的概念、特征及優(yōu)點(diǎn)訪問(wèn)修飾符對(duì)類成員的訪問(wèn)限制this與super關(guān)鍵字 3static與final關(guān)鍵字 static關(guān)鍵字static修飾的變量叫靜態(tài)變量static修飾的方法叫靜態(tài)方法static修飾的代碼塊叫靜態(tài)代碼塊編寫一個(gè)國(guó)家類,要求該類中有一個(gè)變量用來(lái)統(tǒng)計(jì)該類實(shí)例化了幾個(gè)中國(guó)人對(duì)象4static與final關(guān)鍵字 靜態(tài)變量 static修飾的變量,又稱為類變量語(yǔ)法: static 數(shù)據(jù)類型 變量名;

2、特征:靜態(tài)變量屬于某個(gè)類,被所有實(shí)例所共享類變量?jī)H在生成第一個(gè)對(duì)象時(shí)分配內(nèi)存,所有實(shí)例對(duì)象共享同一個(gè)類變量,每個(gè)實(shí)例對(duì)象對(duì)類變量的改變都會(huì)影響到其它的實(shí)例對(duì)象。可以通過(guò)類名方式或者實(shí)例名方式訪問(wèn)不能被this和super訪問(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ò)類名訪問(wèn)靜態(tài)變量 6使用靜態(tài)變量static與final關(guān)鍵字 static方法 static修飾的方法,又成為類方法語(yǔ)法: 訪問(wèn)修飾符 static 返回?cái)?shù)據(jù)類型 方法名(參數(shù)列表) 方法體;特征:類方法不能訪問(wèn)實(shí)例變量,只能訪問(wèn)類變量或類方法。 類方法可以由類名直接調(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ò)類名訪問(wèn)靜態(tài)方法 static與final關(guān)鍵字 靜態(tài)代碼塊特征:靜態(tài)代碼塊不存在于任何方法體中類中的靜態(tài)代碼塊被自動(dòng)執(zhí)行,盡管我們產(chǎn)生了類的多個(gè)實(shí)例對(duì)象,但其中的靜態(tài)代碼塊只被執(zhí)行了一次。當(dāng)JAVA虛擬機(jī)加載類時(shí)被載入,靜態(tài)代碼塊被執(zhí)行,靜態(tài)塊經(jīng)常用來(lái)進(jìn)行類屬性的初始化。 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修飾類:是最終類,不能被其他類所繼承 public final class String final修飾變量:(成員變量或局部變量)即為常量,只能賦值一次,只能訪問(wèn),不能修改其值。而且通常變量名用大寫字母。如: public static final int INCREMENT=5final修飾成員方法:是最終方法,不能被子類重

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

7、動(dòng)物羊Sheep和狼Wolf ,各自的要求如下:Sheep屬性:名稱,重量方法:吃飯(吃草)、睡覺、呼吸、動(dòng)物描述 Wolf屬性:名稱,重量方法:吃飯(吃肉)、睡覺、呼吸、動(dòng)物描述15為什么需要繼承(續(xù))以下這個(gè)解決方案中存在著什么問(wèn)題?public class Sheep private String name;/ 名稱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;/ 名稱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)?有沒有可能建立繼承關(guān)系,讓子類自動(dòng)繼承父類的屬性和方法?Sheep是動(dòng)物嗎?Wolf是動(dòng)物嗎?屬性行為名稱重量吃飯睡覺呼吸描述動(dòng)物SheepWolf19JAVA中的繼承語(yǔ)法 class subclass-name extends superclass-name /類體 特征父類通用,它具有更一般的特征和行為,較為抽象。子類具體,它除了具有父類的特征和行為之外,還具有

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

12、Wolf類public class Animal private String name;/名稱 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)在,所有子類中相同的代碼都抽取到父類中了 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);子類自動(dòng)繼承父類的屬性和方法,子類中不再存在重復(fù)代碼由于eat()方法與父類的實(shí)現(xiàn)有所不同,因此重寫了該方法 23Lab6_1:編寫一個(gè)應(yīng)用程序,設(shè)計(jì)一個(gè)汽車類 Vehicle,包含的屬性有車輪個(gè)數(shù) wheels和車重weight。小車類Car 是Vehicle 的子類,其中包含的屬性有載人數(shù) loader??ㄜ囶?Truck 是Car類的子類,其中包含

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

溫馨提示

  • 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論