JavaSE-9-面向?qū)ο缶幊?四)_第1頁(yè)
JavaSE-9-面向?qū)ο缶幊?四)_第2頁(yè)
JavaSE-9-面向?qū)ο缶幊?四)_第3頁(yè)
JavaSE-9-面向?qū)ο缶幊?四)_第4頁(yè)
JavaSE-9-面向?qū)ο缶幊?四)_第5頁(yè)
已閱讀5頁(yè),還剩25頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

Object類對(duì)象轉(zhuǎn)型抽象類和抽象方法final關(guān)鍵字接口的創(chuàng)建和使用現(xiàn)在是1頁(yè)\一共有30頁(yè)\編輯于星期一Object類是所有Java類的根父類(最高父類)任何一個(gè)java的類(class)都直接或者間接繼承自O(shè)bject類如果在類的聲明中未使用extends關(guān)鍵字指明其父類,則默認(rèn)父類為Object類

publicclassPerson{ ... }

等價(jià)于:publicclassPersonextendsObject{ ...}現(xiàn)在是2頁(yè)\一共有30頁(yè)\編輯于星期一在父類中定義一個(gè)構(gòu)造方法,2個(gè)static{},2個(gè){}.在子類中定義一個(gè)構(gòu)造方法,2個(gè)static{},2個(gè){}.在場(chǎng)景類中創(chuàng)建一個(gè)子類對(duì)象,觀察結(jié)果,觀察調(diào)用順序.現(xiàn)在是3頁(yè)\一共有30頁(yè)\編輯于星期一對(duì)Java對(duì)象的類型轉(zhuǎn)換稱為造型在造型前通常使用instanceof操作符測(cè)試一個(gè)對(duì)象的類型從子類到父類的類型轉(zhuǎn)換可以自動(dòng)進(jìn)行(多態(tài))從父類到子類的類型轉(zhuǎn)換必須通過造型(強(qiáng)制類型轉(zhuǎn)換)實(shí)現(xiàn)子類的對(duì)象可以當(dāng)做基類的對(duì)象來使用稱作向上轉(zhuǎn)型(多態(tài)),反之稱為向下轉(zhuǎn)型無(wú)繼承關(guān)系的引用類型間的轉(zhuǎn)換是非法的現(xiàn)在是4頁(yè)\一共有30頁(yè)\編輯于星期一//Person及Student類可自行定義publicclassTest{ publicvoidmethod(Persone){ System.out.println(e.getSchool());//

if(einstanceofStudent){ Studentme=(Student)e; System.out.println(me.getSchool()); } } publicstaticvoidmain(Stringargs[]){ Testt=newTest();

Personm=newStudent(); t.method(m); }}現(xiàn)在是5頁(yè)\一共有30頁(yè)\編輯于星期一Object類中定義有publicStringtoString()方法,其返回值是String類型,描述當(dāng)前對(duì)象的有關(guān)信息。//默認(rèn)情況是打印的是類名@hashcode的十六進(jìn)制表示在進(jìn)行String與其他類型數(shù)據(jù)的連接操作時(shí)(如:System.out.println("info"+person)),將自動(dòng)調(diào)用該對(duì)象類的toString()方法??梢愿鶕?jù)需要在用戶自定義類型中重寫toString()方法。現(xiàn)在是6頁(yè)\一共有30頁(yè)\編輯于星期一toString方法的列子:現(xiàn)在是7頁(yè)\一共有30頁(yè)\編輯于星期一

Object類的方法

publicinthashCode()方法

返回該對(duì)象的哈希碼值。

publicClassgetClass()方法

返回此Object的運(yùn)行時(shí)類。現(xiàn)在是8頁(yè)\一共有30頁(yè)\編輯于星期一==操作符相同的字符串常量相等兩個(gè)Integer,如果其中至少一個(gè)是new出來的,則不等;如果都是同一個(gè)常量賦值的,則相等(-128~127).基本數(shù)據(jù)類型和封裝類會(huì)拆箱比較數(shù)值兩個(gè)不同封裝類的對(duì)象不能比較,編譯報(bào)錯(cuò).兩個(gè)不同的基本數(shù)據(jù)類型,如果可以自動(dòng)轉(zhuǎn)換,則可以比較.有繼承關(guān)系的引用數(shù)據(jù)類型對(duì)象之間可以比較,當(dāng)指向同一個(gè)對(duì)象時(shí)相等.沒有繼承關(guān)系的引用數(shù)據(jù)類型不能比較.現(xiàn)在是9頁(yè)\一共有30頁(yè)\編輯于星期一equals方法在Object類中定義的equals方法: publicbooleanequals(Objectobj) 注意:形參是Object類型!!equals()方法的調(diào)用者必須是引用數(shù)據(jù)類型調(diào)用equals(...)方法時(shí)的實(shí)參可以是基本數(shù)據(jù)類型,java會(huì)自動(dòng)進(jìn)行裝箱.現(xiàn)在是10頁(yè)\一共有30頁(yè)\編輯于星期一==操作符與equals方法在比較引用數(shù)據(jù)類型時(shí),==操作符與equals()作用完全一樣------看引用的是不是同一對(duì)象除非在自定義的類中重寫了equals方法,或是下面的四類已經(jīng)重寫了equals方法的特例:java.io.File;java.lang.String;//先講,再講自定義類重寫.java.util.Date封裝類

這四類當(dāng)用equals()方法進(jìn)行比較時(shí),只比較類型及內(nèi)容而不看引用的是不是同一對(duì)象.現(xiàn)在是11頁(yè)\一共有30頁(yè)\編輯于星期一==操作符與equals方法舉例classTestEquals{

//請(qǐng)自行定義能滿足需要的MyDate類

publicstaticvoidmain(String[]args){ MyDatem1=newMyDate(24,3,2001); MyDatem2=newMyDate(24,3,2001); if(m1==m2){ System.out.println("m1==m2"); }else{ System.out.println("m1!=m2"); } if(m1.equals(m2)){ System.out.println("m1isequaltom2"); }else{ System.out.println("m1isnotequaltom2"); }

m2=m1; if(m1==m2){ System.out.println("m1==m2"); }else{ System.out.println("m1!=m2"); }}}現(xiàn)在是12頁(yè)\一共有30頁(yè)\編輯于星期一應(yīng)用場(chǎng)景:在定義一個(gè)類時(shí),有些方法暫時(shí)還不知道該怎么實(shí)現(xiàn),只能等子類把這些方法都實(shí)現(xiàn)后才能使用.這樣的方法應(yīng)該定義為抽象abstract方法.含有抽象方法的類必須定義為抽象abstract類.現(xiàn)在是13頁(yè)\一共有30頁(yè)\編輯于星期一用abstract來修飾類或方法

[修飾符]abstractclass類名{…}

[修飾符]abstract返回值類型方法名([形參列表]);抽象類不能被實(shí)例化,抽象方法必須被全部重寫后,其子類才可以聲明為非抽象的,才能生成它的子類對(duì)象。如果一個(gè)子類沒有實(shí)現(xiàn)抽象基類中所有的抽象方法,則子類也要聲明為一個(gè)抽象類。抽象類不一定包含抽象方法----不想讓人直接實(shí)例化可以聲明抽象類類型的引用,把它作為方法形參,返回值類型等現(xiàn)在是14頁(yè)\一共有30頁(yè)\編輯于星期一在類中沒有實(shí)現(xiàn)的方法就是抽象方法,抽象方法沒有方法體(不同于方法體為空{(diào)})。思考:構(gòu)造方法,靜態(tài)方法,public方法,protected方法,default方法,private方法,final方法能不能被聲明為抽象的方法。思考:屬性能否用abstract來修飾?現(xiàn)在是15頁(yè)\一共有30頁(yè)\編輯于星期一思考:抽象類中可以有普通方法嗎?抽象類中可以有構(gòu)造方法嗎?抽象類中可以有static方法嗎?抽象類中可以有static屬性嗎?抽象類中可以有實(shí)例屬性嗎?現(xiàn)在是16頁(yè)\一共有30頁(yè)\編輯于星期一關(guān)鍵字final在Java中聲明類、屬性和方法時(shí),可使用final修飾符來修飾。final標(biāo)記的類不能被繼承。final標(biāo)記的方法不能被子類重寫。final標(biāo)記的變量(成員變量或局部變量)即成為常量,只能賦值一次,且在使用前必須被賦值。final標(biāo)記的方法的形參不能被重新賦值.final標(biāo)記的成員變量必須在聲明的同時(shí)或在每個(gè)構(gòu)造方法(或構(gòu)造語(yǔ)句塊)中顯式賦值(不會(huì)被默認(rèn)初始化),然后才能使用。構(gòu)造方法不能用final來修飾,因?yàn)闃?gòu)造方法不能被繼承,更無(wú)所謂重寫,用final修飾沒有意義,編譯會(huì)報(bào)錯(cuò).現(xiàn)在是17頁(yè)\一共有30頁(yè)\編輯于星期一關(guān)鍵字final應(yīng)用舉例publicfinalclassTest{ publicstaticinttotalNumber=5; publicfinalintid; publicTest(){ id=++totalNumber; } publicstaticvoidmain(String[]args){ Testt=newTest(); System.out.println(t.id); finalinti=10; finalintj; j=20; j=30;//非法 }}現(xiàn)在是18頁(yè)\一共有30頁(yè)\編輯于星期一練習(xí):對(duì)比static/final關(guān)鍵字參考前面章節(jié),復(fù)習(xí)static修飾符的用法;練習(xí)前頁(yè)例子及下述程序,并改正其錯(cuò)誤,體會(huì)final關(guān)鍵字修飾變量時(shí)的用法;publicclassTestFinal{ publicstaticvoidmain(Stringargs[]){ inti=1; finalintj=10; j=100; finalintk; k=100; k=200;System.out.println("i="+i+"j="+j+"k="+k); }}現(xiàn)在是19頁(yè)\一共有30頁(yè)\編輯于星期一現(xiàn)在是20頁(yè)\一共有30頁(yè)\編輯于星期一接口(interface)是抽象方法和常量值組成的一個(gè)數(shù)據(jù)結(jié)構(gòu)。從本質(zhì)上講,接口是一種特殊的抽象類,這種抽象類中只包含常量和方法的定義,而沒有方法的實(shí)現(xiàn)[jdk8之前]jdk8之后,接口中可以定義default方法(一種實(shí)例方法),static方法接口定義舉例publicinterfaceRunner{ intid=1; voidstart(); publicvoidrun(); abstractvoidstop();}接口(1)現(xiàn)在是21頁(yè)\一共有30頁(yè)\編輯于星期一接口(2)多個(gè)類可以實(shí)現(xiàn)同一個(gè)接口一個(gè)類可以實(shí)現(xiàn)多個(gè)接口與繼承關(guān)系類似,接口與實(shí)現(xiàn)類之間存在多態(tài)性定義java類的完整語(yǔ)法格式:

[<modifier>]class<name>[extends<superclass>] [implements<interface>[,<interface>]*]{ <declarations>* }現(xiàn)在是22頁(yè)\一共有30頁(yè)\編輯于星期一接口應(yīng)用舉例(1)publicinterfaceRunner{ voidstart(); publicvoidrun(); publicvoidstop();}現(xiàn)在是23頁(yè)\一共有30頁(yè)\編輯于星期一接口應(yīng)用舉例(1)publicclassPersonimplementsRunner{ publicvoidstart(){

//彎腰、蹬腿、咬牙、瞪眼、開跑 } publicvoidrun(){

//擺動(dòng)手臂、維持直線方向 } publicvoidstop(){

//減速直至停止、癱倒、吐血、送醫(yī)院 }}現(xiàn)在是24頁(yè)\一共有30頁(yè)\編輯于星期一接口應(yīng)用舉例(2)現(xiàn)在是25頁(yè)\一共有30頁(yè)\編輯于星期一接口應(yīng)用舉例(3)interfaceRunner{publicvoidrun();}interfaceSwimmer{publicdoubleswim();}abstractclassAnimal{publicabstractinteat();}//classPersonextendsAnimalimplementsRunner,Swimmer{ publicvoidrun(){……} publicdoubleswim(){……} publicinteat(){……}}publicclassTest{ publicstaticvoidmain(Stringargs[]){ Testt=newTest(); Personp=newPerson(); t.m1(p); t.m2(p); t.m3(p); } publicvoidm1(Runnerf){f.run();} publicvoidm2(Swimmers){s.swim();} publicvoidm3(Animala){a.eat();}}現(xiàn)在是26頁(yè)\一共有30頁(yè)\編輯于星期一Ex2實(shí)現(xiàn)前頁(yè)各類中的方法細(xì)節(jié),并根據(jù)自己的疑問改編和擴(kuò)充有關(guān)類和接口的定義,體會(huì)接口的功能和

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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)論