Java核心及基礎(chǔ)應(yīng)用Java面向?qū)ο笏枷爰昂诵恼n件_第1頁(yè)
Java核心及基礎(chǔ)應(yīng)用Java面向?qū)ο笏枷爰昂诵恼n件_第2頁(yè)
Java核心及基礎(chǔ)應(yīng)用Java面向?qū)ο笏枷爰昂诵恼n件_第3頁(yè)
Java核心及基礎(chǔ)應(yīng)用Java面向?qū)ο笏枷爰昂诵恼n件_第4頁(yè)
Java核心及基礎(chǔ)應(yīng)用Java面向?qū)ο笏枷爰昂诵恼n件_第5頁(yè)
已閱讀5頁(yè),還剩25頁(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、第一階段 Java核心及基礎(chǔ)應(yīng)用 -Java面向?qū)ο笏枷爰昂诵?楊振宇 2011 . 11第1頁(yè),共30頁(yè)。Java 面向?qū)ο笏枷爰昂诵?一、接口、抽象類二、內(nèi)部類、匿名類和包 三、字符串類 四、異常處理 五、JDK 核心API和高級(jí)類 六、圖形界面編程 七、IO輸入輸出流 八、多線程九、集合框架后續(xù):網(wǎng)絡(luò)編程、JDBC前期基礎(chǔ):Java基礎(chǔ)、面向?qū)ο缶幊?、類和繼承 第2頁(yè),共30頁(yè)。6.1.1 類的定義人:張三?李四?電話機(jī)?茶具?沙發(fā)?第3頁(yè),共30頁(yè)。一、接口和抽象類 1、接口的概念2、接口的實(shí)現(xiàn)3、抽象類和抽象方法4、接口回調(diào)5、接口作參數(shù)6、類的多態(tài)第4頁(yè),共30頁(yè)。Java語(yǔ)言中,

2、一個(gè)子類只可以繼承一個(gè)直接父類,這被稱為單一繼承。使用單一繼承雖然各個(gè)類之間的層次關(guān)系清楚、可讀性強(qiáng),但是在處理一些復(fù)雜問(wèn)題時(shí),則會(huì)顯得功能不夠強(qiáng)大。因此,Java語(yǔ)言提供了接口功能,來(lái)實(shí)現(xiàn)多重繼承。接口是用來(lái)組織類內(nèi)容的一種程序結(jié)構(gòu),一個(gè)類可以有多個(gè)接口。在Java語(yǔ)言中,一個(gè)對(duì)象的行為一般是與其具體的實(shí)現(xiàn)細(xì)節(jié)分開(kāi)的。這種對(duì)象行為與行為的具體實(shí)現(xiàn)細(xì)節(jié)分離的設(shè)計(jì)方法稱為抽象。1、接口的概念第5頁(yè),共30頁(yè)。在Java語(yǔ)言中,使用接口來(lái)定義某個(gè)類所支持的操作。因此,在接口中,所有的方法均為抽象方法。接口定義的僅僅是實(shí)現(xiàn)某一特定功能的接口和其規(guī)范,而并沒(méi)有真正實(shí)現(xiàn)這個(gè)功能。這個(gè)功能的真正實(shí)現(xiàn)是在應(yīng)

3、用這個(gè)接口的類中完成的,要由類來(lái)具體定義接口中各個(gè)抽象方法的語(yǔ)句體。 例如:如果我們定義了一個(gè)名為Calculate的接口,其中有add()和minus()兩個(gè)抽象方法,那么任何實(shí)現(xiàn)該接口的類都必須支持其中的add()和minus()方法,也就是說(shuō)在類中具體描述這兩個(gè)方法的語(yǔ)句體內(nèi)容。 1、接口的概念第6頁(yè),共30頁(yè)。創(chuàng)建接口的形式如下。public interface 接口名 public static final 類型 變量名 = 常量數(shù)據(jù); public abstract 方法類型 方法名( 參數(shù) ); 其中,關(guān)鍵字interface是用來(lái)定義接口的,接口名要符合Java對(duì)標(biāo)識(shí)符的規(guī)定,

4、public是接口的唯一訪問(wèn)控制修飾符。如果沒(méi)有使用任何訪問(wèn)控制修飾符,則表示只有與該接口定義在同一個(gè)包中的類才可以訪問(wèn)這個(gè)接口。接口中的變量只能是常量形式的變量,方法也必須是抽象方法。因?yàn)榻涌谥械姆椒ň鞘褂眯揎椃鹥ublic和關(guān)鍵字abstract修飾的,所以在書(shū)寫(xiě)時(shí)可以省略這兩個(gè)單詞。2、接口的實(shí)現(xiàn)第7頁(yè),共30頁(yè)。例如:在下面的接口程序中,我們定義了2個(gè)常量和3個(gè)抽象方法。interface Calculate int i = 10; String s = 計(jì)算結(jié)果如下。 boolean isZhishu(); int add( int a, int b ); double minus

5、( int a, int b ); 創(chuàng)建接口僅僅給出了抽象方法,如果要具體的實(shí)現(xiàn)接口所定義的方法,則需要某個(gè)類為接口中的每個(gè)抽象方法定義具體的操作來(lái)實(shí)現(xiàn)這個(gè)接口的功能。2、接口的實(shí)現(xiàn)第8頁(yè),共30頁(yè)。實(shí)現(xiàn)接口的形式為:public class 類名 implements 接口名1, 接口名2, 語(yǔ)句體 其中,使用關(guān)鍵字implements來(lái)定義這個(gè)類的接口,一個(gè)類可以實(shí)現(xiàn)多個(gè)接口,使用逗號(hào)將它們分隔開(kāi)。注意三點(diǎn): 1)如果實(shí)現(xiàn)某個(gè)接口的類不是使用關(guān)鍵字abstract修飾的抽象類,則在類中必須定義實(shí)現(xiàn)接口所有抽象方法的具體實(shí)例方法,并且該方法必須與接口中的方法定義完全一致,也就是說(shuō)具有完全相同

6、的參數(shù)個(gè)數(shù)和類型,以及方法的返回類型。2、接口的實(shí)現(xiàn)第9頁(yè),共30頁(yè)。 2)如果實(shí)現(xiàn)某個(gè)接口的類是使用關(guān)鍵字abstract修飾的抽象類,則它可以不實(shí)現(xiàn)該接口所有的方法。但是在這個(gè)抽象類的任何一個(gè)非抽象子類中,必須具體定義其父類所實(shí)現(xiàn)的接口中的所有抽象方法。另外,可以定義一個(gè)新的接口,用extend關(guān)鍵字去繼承一個(gè)已有的接口; 3)接口的抽象方法的訪問(wèn)控制符均為public,所以類在實(shí)現(xiàn)這些抽象方法時(shí),必須使用public修飾符。例如:public interface Num int num = 10; public void printNum();public class TestNum i

7、mplements Num public void printNum() System.out.println( Num= + Num ); 2、接口的實(shí)現(xiàn)第10頁(yè),共30頁(yè)。 抽象類的意義與接口基本一樣,都是為了更好的控制類的抽象結(jié)構(gòu)。定義抽象類的形式為:abstract class 類名 語(yǔ)句體1)抽象類中的方法可以是實(shí)例方法,也可以抽象方法。但是如果一個(gè)類含有抽象方法,則此類必須為抽象類。而其如果一個(gè)類是抽象類的子類且其不是抽象類,則該子類必須實(shí)現(xiàn)父類的所有抽象方法。2)抽象方法定義了一個(gè)抽象類的功能,但是沒(méi)有給出該功能的具體實(shí)現(xiàn)過(guò)程。定義抽象方法的形式為: abstract 方法類型

8、方法名( 參數(shù) );3)抽象方法不能使用修飾符static和final修飾。3、抽象類和抽象方法第11頁(yè),共30頁(yè)。 接口與抽象類有相似之處,但也有區(qū)別,下表反映了兩者的區(qū)別。3、抽象類和抽象方法第12頁(yè),共30頁(yè)。案例 接口的實(shí)現(xiàn)與運(yùn)用目的:(1)學(xué)習(xí)如何定義接口;(2)掌握接口的實(shí)現(xiàn)方式;(3)使用實(shí)現(xiàn)了接口的類;(4)理解接口與抽象類的區(qū)別。任務(wù): 設(shè)計(jì)和實(shí)現(xiàn)一個(gè) Soundable 接口,該接口具有發(fā)聲功能,同時(shí)還能夠調(diào)節(jié)聲音大小。Soundable接口的這些功能將會(huì)由3種聲音設(shè)備來(lái)具體實(shí)現(xiàn),它們分別是收音機(jī)Radio、隨身聽(tīng)Walkman 和手機(jī)Mobilephone。最后還要設(shè)計(jì)一

9、個(gè)應(yīng)用程序類來(lái)使用這些實(shí)現(xiàn)了Soundable 接口的聲音設(shè)備類。程序運(yùn)行時(shí),先詢問(wèn)用戶想聽(tīng)哪種設(shè)備,然后程序就會(huì)按照該設(shè)備的工作方式來(lái)發(fā)出聲音。程序運(yùn)行的效果如圖所示。第13頁(yè),共30頁(yè)。思考:(1)請(qǐng)問(wèn)在InterfaceTest 類中,SoundDevice數(shù)組是什么類型的,該數(shù)組為什么能存放3種不同的對(duì)象Radio、Walkman 和Mobilephone 呢?(2)在程序中,Soundable 是一個(gè)接口,那么該接口是否可以被實(shí)例化呢?請(qǐng)?jiān)贗nterfaceTest 類的main()方法中加入以下語(yǔ)句試驗(yàn)一下,并分析結(jié)果。案例 接口的實(shí)現(xiàn)與運(yùn)用第14頁(yè),共30頁(yè)。(3)現(xiàn)在假定要為程

10、序增加一個(gè)鬧鐘類Clock,該類也實(shí)現(xiàn)Soundable 接口,能夠發(fā)出滴答聲,請(qǐng)將以下的Clock 類加入到InterfaceTest.java 程序中,并在InterfaceTest 類的main()方法中加入SoundDevice3 = new Clock();語(yǔ)句。修改之后,重新編譯 InterfaceTest.java 并運(yùn)行它,觀察結(jié)果。案例 接口的實(shí)現(xiàn)與運(yùn)用第15頁(yè),共30頁(yè)。(4)在第(3)小題中由于新加入的Clock 類僅僅實(shí)現(xiàn)了Soundable 接口的stopSound()和playSound()方法,而increaseVolume()和decreaseVolume()方

11、法沒(méi)有實(shí)現(xiàn),因此它實(shí)質(zhì)上是一個(gè)抽象類,而抽象類是不能實(shí)例化的,所以導(dǎo)致編譯錯(cuò)誤。但是按照常理,鬧鐘的滴答聲確實(shí)是不可以增大或減小的,那么如何解決這個(gè)問(wèn)題呢?現(xiàn)在請(qǐng)?jiān)贑lock 類中加入下面兩個(gè)含空方法體的方法實(shí)現(xiàn),再編譯運(yùn)行程序,看看會(huì)有什么變化。案例 接口的實(shí)現(xiàn)與運(yùn)用(5)現(xiàn)在請(qǐng)模仿本實(shí)驗(yàn)的程序設(shè)計(jì)出一個(gè)自己的接口程序,要求先設(shè)計(jì)一個(gè)moveable可移動(dòng)接口,然后分別設(shè)計(jì)3個(gè)類,即汽車Car、輪船Ship、飛機(jī)Aircraft 來(lái)實(shí)現(xiàn)該接口,最后設(shè)計(jì)一個(gè)應(yīng)用程序來(lái)使用它們。第16頁(yè),共30頁(yè)。4、接口回調(diào)接口回調(diào)是指:可以把實(shí)現(xiàn)某一接口的類創(chuàng)建的對(duì)象的引用賦給該接口聲明的接口變量中。那么該

12、接口變量就可以調(diào)用被類實(shí)現(xiàn)的接口中的方法。實(shí)際上,當(dāng)接口變量調(diào)用被類實(shí)現(xiàn)的接口中的方法時(shí),就是通知相應(yīng)的對(duì)象調(diào)用接口的方法。實(shí)例運(yùn)行第17頁(yè),共30頁(yè)。5、接口作參數(shù)一個(gè)方法的參數(shù)是接口類型,就可以將任何實(shí)現(xiàn)該接口的類的實(shí)例的引用傳遞給該接口參數(shù),接口參數(shù)就可以回調(diào)類實(shí)現(xiàn)的接口方法。 實(shí)例運(yùn)行第18頁(yè),共30頁(yè)。6、類的多態(tài)1)多態(tài)的概念2)動(dòng)態(tài)綁定第19頁(yè),共30頁(yè)。 多態(tài)是指程序的多種表現(xiàn)形式。除了方法的重載,子類對(duì)父類方法的覆蓋或者子類對(duì)抽象父類中的抽象方法的具體定義也是類多態(tài)的一種表現(xiàn)形式。 所謂覆蓋,是在定義子類的方法時(shí),使用與其父類中相同的名稱和參數(shù)。在執(zhí)行程序時(shí),將執(zhí)行子類的方法

13、,而覆蓋父類的方法。1)多態(tài)的概念第20頁(yè),共30頁(yè)。例如:public double sum( double a, double b ) return a + b;在子類中有方法名和參數(shù)都完全相同,但是語(yǔ)句體內(nèi)容不同的方法public double sum( double a, double b ) return a * b;當(dāng)編寫(xiě)應(yīng)用程序,通過(guò)子類對(duì)象調(diào)用sum()方法時(shí),只會(huì)執(zhí)行子類中求積的方法,而不會(huì)執(zhí)行父類中求和的方法。 1)多態(tài)的概念第21頁(yè),共30頁(yè)。利用多態(tài)性,可以將一個(gè)方法的形參設(shè)為超類類型,而將傳遞給該方法的實(shí)參既可以是超類對(duì)象也可以是子類對(duì)象。具體執(zhí)行時(shí),Java 會(huì)自動(dòng)

14、根據(jù)實(shí)際對(duì)象所屬的類型來(lái)選擇方法執(zhí)行,因此多態(tài)性增強(qiáng)了編程的靈活性和系統(tǒng)的維護(hù)性和可擴(kuò)展性。1)多態(tài)的概念第22頁(yè),共30頁(yè)。2)動(dòng)態(tài)綁定在 Java 中超類往往定義出一個(gè)通用的方法,而其不同的實(shí)現(xiàn)則由它的不同的子類來(lái)完成。當(dāng)通過(guò)對(duì)象來(lái)調(diào)用這樣一個(gè)方法時(shí),Java會(huì)依據(jù)運(yùn)行時(shí)該對(duì)象的實(shí)際類型來(lái)決定用方法的哪一個(gè)版本來(lái)執(zhí)行,也即動(dòng)態(tài)地綁定一個(gè)方法來(lái)執(zhí)行。動(dòng)態(tài)綁定的前提是:Java 允許將子類對(duì)象賦給超類類型的變量,每個(gè)子類對(duì)象同時(shí)也是其超類的對(duì)象。第23頁(yè),共30頁(yè)。案例 多態(tài)性與動(dòng)態(tài)綁定目的:(1)掌握多態(tài)性在繼承中的運(yùn)用;(2)理解動(dòng)態(tài)綁定的含義;(3)學(xué)會(huì)使用抽象類;(4)了解成員變量的隱

15、藏。任務(wù): 請(qǐng)?jiān)O(shè)計(jì)3個(gè)類,分別是學(xué)生類Student,本科生類Undergraduate,研究生類Postgraduate,其中Student 類是一個(gè)抽象類,它包含一些基本的學(xué)生信息如姓名、所學(xué)課程、課程成績(jī)等,而Undergraduate 類和Postgraduate 都是Student 類的子類,它們之間的主要差別是計(jì)算課程成績(jī)等級(jí)的方法有所不同,研究生的標(biāo)準(zhǔn)要比本科生的標(biāo)準(zhǔn)高一些,如下表所示。第24頁(yè),共30頁(yè)。本科生標(biāo)準(zhǔn)研究生標(biāo)準(zhǔn)80100優(yōu)秀90100優(yōu)秀7079良好8089良好6069一般7079一般5059及格6069及格50 以下不及格60以下不及格 假設(shè)某班級(jí)里既有本科生也

16、有研究生,請(qǐng)編寫(xiě)程序統(tǒng)計(jì)出全班學(xué)生的成績(jī)等級(jí)并顯示出來(lái)。此題關(guān)鍵是設(shè)計(jì)一個(gè)學(xué)生數(shù)組,既能存放本科生對(duì)象,又能存放研究生對(duì)象,程序的運(yùn)行效果如圖所示。案例 多態(tài)性與動(dòng)態(tài)綁定第25頁(yè),共30頁(yè)。思考:(1)在Polymorphism 類中有一個(gè)循環(huán)語(yǔ)句用來(lái)計(jì)算每個(gè)學(xué)生的成績(jī)等級(jí) for (int i = 0; I 5; i+) studentsi.calculateGrade(); 請(qǐng)問(wèn)這里的 calculateGrade()方法是按照研究生的標(biāo)準(zhǔn)還是按照本科生的標(biāo)準(zhǔn)來(lái)計(jì)算的。(2)請(qǐng)問(wèn)在程序Polymorphism 類中,哪些語(yǔ)句體現(xiàn)了子類的對(duì)象可以賦值給父類的引用變量。案例 多態(tài)性與動(dòng)態(tài)綁定第

17、26頁(yè),共30頁(yè)。(3)現(xiàn)在請(qǐng)?jiān)诔绦騊olymorphisrn 類的main()方法中添加如下的語(yǔ)句Student st = new Student(李明);此時(shí)編譯是否會(huì)報(bào)錯(cuò),如有錯(cuò)誤,請(qǐng)解釋原因。(4)在程序中要判斷studenti中存放的究竟是Undergraduate 對(duì)象還是Postgraduate 對(duì)象,只需要調(diào)用studenti.getType()方法即可,然而Java 提供了一個(gè)instanceof 運(yùn)算也可以完成這一任務(wù),它能判斷出一個(gè)對(duì)象所屬的類,請(qǐng)將以下代碼添加到程序中進(jìn)行測(cè)試。案例 多態(tài)性與動(dòng)態(tài)綁定第27頁(yè),共30頁(yè)。(5)現(xiàn)在請(qǐng)模仿本程序,新增一個(gè)高中生類,它計(jì)算成績(jī)等級(jí)的標(biāo)準(zhǔn)采用如下方法,然后在主程序中測(cè)試并使用它。案例 多態(tài)性與動(dòng)態(tài)綁定第28頁(yè),共30頁(yè)。使用接口要點(diǎn) 如果一個(gè)類使用了某個(gè)接口,那么這個(gè)類必須實(shí)該接口的所有方法,即為這些方法提供方法體。在類中實(shí)現(xiàn)接口的方法時(shí),方法的名字、返回類參數(shù)個(gè)數(shù)及類型必須與接口中的完全一致。接口中的方法被默認(rèn)是public的,所以類在實(shí)現(xiàn)口方法時(shí),一定要用public來(lái)修飾。如果接口方法名有返回類型,那么在類中實(shí)現(xiàn)該口方法時(shí),方法體至少要有一個(gè)return

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論