版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
學(xué)習(xí)目標(biāo)/Target掌握方法的重寫,能夠在子類中重寫父類方法掌握super關(guān)鍵字,能夠在類中使用super關(guān)鍵字訪問(wèn)父類成員了解面向?qū)ο笾械睦^承特性,能夠說(shuō)出繼承的概念與特點(diǎn)掌握f(shuō)inal關(guān)鍵字,能夠靈活使用final關(guān)鍵字修飾類、方法和變量掌握抽象類,能夠熟練實(shí)現(xiàn)抽象類的定義與使用學(xué)習(xí)目標(biāo)/Target掌握接口,能夠獨(dú)立進(jìn)行接口的編寫了解Object類,能夠說(shuō)出Object類的常用方法熟悉內(nèi)部類,能夠說(shuō)出4種內(nèi)部類的特點(diǎn)掌握多態(tài),能夠熟練使用對(duì)象類型轉(zhuǎn)換解決繼承中的多態(tài)問(wèn)題章節(jié)概述/Summary在上一章中,介紹了面向?qū)ο蟮幕居梅?,并?duì)面向?qū)ο蟮娜筇卣髦坏姆庋b特性進(jìn)行了詳細(xì)地講解。本章將繼續(xù)講解面向?qū)ο笾信c繼承和多態(tài)相關(guān)的知識(shí)。目錄/Contents010203繼承final關(guān)鍵字抽象類和接口目錄/Contents0405多態(tài)內(nèi)部類06Object類繼承4.14.1.1繼承的概念
先定一個(gè)小目標(biāo)!了解繼承的概念,能夠說(shuō)出繼承的概念和如何實(shí)現(xiàn)類的繼承4.1.1繼承的概念現(xiàn)實(shí)生活中,說(shuō)到繼承,通常會(huì)想到子女繼承父輩的財(cái)產(chǎn)、事業(yè)等。在程序中,繼承描述的是事物之間的所屬關(guān)系,通過(guò)繼承可以使多種事物之間形成一種關(guān)系體系。例如,貓和狗都屬于動(dòng)物,程序中便可以描述為貓和狗繼承自動(dòng)物,同理,波斯貓和巴厘貓繼承貓科,而沙皮狗和斑點(diǎn)狗繼承自犬科。4.1.1繼承的概念上述動(dòng)物繼承關(guān)系如下圖所示。繼承關(guān)系圖譜4.1.1繼承的概念在Java中,類的繼承是指在一個(gè)現(xiàn)有類的基礎(chǔ)上構(gòu)建一個(gè)新的類,構(gòu)建出來(lái)的新類被稱作子類,現(xiàn)有類被稱作父類。子類會(huì)自動(dòng)繼承父類的屬性和方法,使得子類具有父類的特征和行為。Java中類的繼承4.1.1繼承的概念在Java程序中,如果想聲明一個(gè)類繼承另一個(gè)類,需要使用extends關(guān)鍵字,其語(yǔ)法格式如下所示。class父類{……}class子類extends父類{……}類的繼承語(yǔ)法格式4.1.1繼承的概念下面通過(guò)一個(gè)案例學(xué)習(xí)子類是如何繼承父類的,具體代碼如下所示。1//定義Animal類2classAnimal{3privateStringname; //聲明name屬性4privateintage; //聲明age屬性......//省略getter/setter方法18}19//定義Dog類繼承Animal類20classDogextendsAnimal{21//此處不寫任何代碼22}案例一演示4.1.1繼承的概念23//定義測(cè)試類24publicclassExample01{25publicstaticvoidmain(String[]args){26Dogdog=newDog();//創(chuàng)建一個(gè)Dog類的對(duì)象27dog.setName("牧羊犬");//此時(shí)調(diào)用的是父類Animal中的setter方法28dog.setAge(3);//此時(shí)調(diào)用的是父類Animal中的setter方法29System.out.println("名稱:"+dog.getName()+",年齡:"+dog.getAge()30+",顏色:"+dog.COLOR);31}32}4.1.1繼承的概念案例一運(yùn)行結(jié)果運(yùn)行代碼,控制臺(tái)顯示的運(yùn)行結(jié)果如下圖所示。子類除了可以繼承父類的屬性和方法,也可以定義自己的屬性和方法。修改案例一,在子類Dog中增加屬性color和相應(yīng)的getter和setter方法,具體代碼如下所示。4.1.1繼承的概念1//定義Animal類2classAnimal{ ......//省略案例一中Animal類的書寫17}18//定義Dog類繼承Animal類19classDogextendsAnimal{20privateStringcolor;//聲明color屬性21publicStringgetColor(){22returncolor;23}24publicvoidsetColor(Stringcolor){25this.color=color;26}27}案例二演示4.1.1繼承的概念28//定義測(cè)試類29publicclassExample02{30publicstaticvoidmain(String[]args){31Dogdog=newDog();//創(chuàng)建并實(shí)例化dog對(duì)象32dog.setName("牧羊犬");//此時(shí)訪問(wèn)的是父類Animal中的setter方法33dog.setAge(3);//此時(shí)訪問(wèn)的是父類Animal中的setter方法34dog.setColor("黑色");//此時(shí)訪問(wèn)的是Dog類中的setter方法35System.out.println("名稱:"+dog.getName()+",年齡:"+dog.getAge()+",36顏色:"+dog.getColor());37}38}4.1.1繼承的概念案例二運(yùn)行結(jié)果運(yùn)行代碼,控制臺(tái)顯示的運(yùn)行結(jié)果如下圖所示。注意:子類雖然可以通過(guò)繼承訪問(wèn)父類的成員和方法,但不是所有的父類屬性和方法都可以被子類訪問(wèn)。子類只能訪問(wèn)父類中public和protected修飾的屬性和方法,父類中被默認(rèn)修飾符default和private修飾的屬性和方法不能被子類訪問(wèn)。4.1.1繼承的概念類的繼承注意事項(xiàng)(1)在Java中,類只支持單繼承,不允許多繼承。也就是說(shuō)一個(gè)類只能有一個(gè)直接父類。例如下面這種情況是不合法的。classA{}classB{}classCextendsA,B{}//C類不可以同時(shí)繼承A類和B類4.1.1繼承的概念類的繼承注意事項(xiàng)(2)多個(gè)類可以繼承一個(gè)父類,例如下面這種情況是允許的。classA{}classBextendsA{}//類B繼承類AclassCextendsA{}//類C繼承類A4.1.1繼承的概念類的繼承注意事項(xiàng)(3)在Java中,多層繼承也是可以的,即一個(gè)類的父類可以再繼承另外的父類。例如,C類繼承自B類,而B(niǎo)類又可以繼承自類A,這時(shí),C類也可稱作A類的子類。例如下面這種情況是允許的。classA{}classBextendsA{}//類B繼承類A,類B是類A的子類classCextendsB{}//類C繼承類B,類C是類B的子類,同時(shí)也是類A的子類4.1.1繼承的概念類的繼承注意事項(xiàng)(4)在Java中,子類和父類是一種相對(duì)概念,一個(gè)類可以是某個(gè)類的父類,也可以是另一個(gè)類的子類。例如,在第(3)種情況中,B類是A類的子類,同時(shí)又是C類的父類。4.1.2方法的重寫
先定一個(gè)小目標(biāo)!掌握方法的重寫,能夠重寫父類的方法4.1.2方法的重寫在繼承關(guān)系中,子類會(huì)自動(dòng)繼承父類中定義的方法,但有時(shí)在子類中需要對(duì)繼承的方法進(jìn)行一些修改,即對(duì)父類的方法進(jìn)行重寫。在子類中重寫的方法需要和父類被重寫的方法具有相同的方法名、參數(shù)列表以及返回值類型。下面通過(guò)一個(gè)案例講解方法的重寫,具體代碼如下所示。4.1.2方法的重寫1//定義Animal類2classAnimal{ 3//定義動(dòng)物叫的方法 4 voidshout(){ 5 System.out.println("動(dòng)物發(fā)出叫聲");6 }7}8//定義Dog類繼承Animal類9classDogextendsAnimal{10 //重寫父類Animal中的shout()方法11 voidshout(){
12 System.out.println("汪汪汪……");13 }14}案例一演示4.1.2方法的重寫15//定義測(cè)試類16publicclassExample03{ 17 publicstaticvoidmain(String[]args){18 Dogdog=newDog();//創(chuàng)建Dog類的實(shí)例對(duì)象19 dog.shout();//調(diào)用Dog類重寫的shout()方法20 }21}4.1.2方法的重寫案例一運(yùn)行結(jié)果運(yùn)行代碼,控制臺(tái)顯示的運(yùn)行結(jié)果如下圖所示。腳下留心子類重寫父類方法時(shí)的訪問(wèn)權(quán)限子類重寫父類方法時(shí),不能使用比父類中被重寫的方法更嚴(yán)格的訪問(wèn)權(quán)限。例如,父類中的方法是public權(quán)限,子類的方法就不能是private權(quán)限。如果子類在重寫父類方法時(shí)定義的權(quán)限縮小,則在編譯時(shí)將出現(xiàn)錯(cuò)誤。腳下留心子類重寫父類方法時(shí)的訪問(wèn)權(quán)限1//定義Animal類2classAnimal{ 3//定義動(dòng)物叫的方法 4publicvoidshout(){ 5 System.out.println("動(dòng)物發(fā)出叫聲");6 }7}8//定義Dog類繼承Animal類9classDogextendsAnimal{10 //重寫父類Animal中的shout()方法11 privatevoidshout(){ 12 System.out.println("汪汪汪……");13 }14}下面我們對(duì)案例一進(jìn)行修改,修改后的代碼如下所示。案例二演示腳下留心子類重寫父類方法時(shí)的訪問(wèn)權(quán)限15//定義測(cè)試類16publicclassExample04{ 17 publicstaticvoidmain(String[]args){18 Dogdog=newDog();//創(chuàng)建Dog類的實(shí)例對(duì)象19 dog.shout();//調(diào)用Dog類重寫的shout()方法20 }21}腳下留心子類重寫父類方法時(shí)的訪問(wèn)權(quán)限案例二運(yùn)行結(jié)果運(yùn)行代碼,控制臺(tái)顯示的運(yùn)行結(jié)果如下圖所示。腳下留心子類重寫父類方法時(shí)的訪問(wèn)權(quán)限案例二運(yùn)行結(jié)果分析從上圖可以看出,編譯文件報(bào)錯(cuò)“com.itheima.Dog中的shout()無(wú)法覆蓋com.itheima.Anima的shout()”,這是因?yàn)樽宇愔貙懜割惙椒〞r(shí),不能使用比父類中被重寫的方法更嚴(yán)格的訪問(wèn)權(quán)限。4.1.3super關(guān)鍵字
先定一個(gè)小目標(biāo)!掌握super關(guān)鍵字,能夠在類中使用super訪問(wèn)父類的屬性和方法4.1.3super關(guān)鍵字當(dāng)子類重寫父類的方法后,子類對(duì)象將無(wú)法訪問(wèn)父類中被子類重寫過(guò)的方法。為了解決這個(gè)問(wèn)題,Java提供了super關(guān)鍵字,使用super關(guān)鍵字可以在子類中訪問(wèn)父類的非私有方法、非私有屬性以及構(gòu)造方法。下面詳細(xì)講解super關(guān)鍵字的具體用法。4.1.3super關(guān)鍵字super關(guān)鍵字的用法一(1)使用super關(guān)鍵字訪問(wèn)或調(diào)用父類的非私屬性或非私有方法,具體格式如下。super.屬性super.方法(參數(shù)1,參數(shù)2…)4.1.3super關(guān)鍵字......//省略定義Animal類9//定義Dog類繼承Animal類10classDogextendsAnimal{11//重寫父類Animal中的shout()方法,擴(kuò)大了訪問(wèn)權(quán)限12 publicvoidshout(){ 13 super.shout();//調(diào)用父類中的shout()方法14 System.out.println("汪汪汪……");15 }16publicvoidprintName(){17System.out.println("名字:"+);//訪問(wèn)父類中的name屬性18}19}下面通過(guò)一個(gè)案例學(xué)習(xí)使用super關(guān)鍵字訪問(wèn)父類的成員變量和成員方法,修改4.1.2中的案例二,具體代碼如下所示。案例一演示4.1.3super關(guān)鍵字20//定義測(cè)試類21publicclassExample05{ 22 publicstaticvoidmain(String[]args){23 Dogdog=newDog();//創(chuàng)建Dog類的對(duì)象24 dog.shout();//調(diào)用Dog類重寫的shout()方法25dog.printName();//調(diào)用Dog類中的printName()方法26 }27}4.1.3super關(guān)鍵字案例一運(yùn)行結(jié)果運(yùn)行代碼,控制臺(tái)顯示的運(yùn)行結(jié)果如下圖所示。由上圖可知,控制臺(tái)打印了“動(dòng)物發(fā)出叫聲”“名字:牧羊犬”,說(shuō)明子類通過(guò)super關(guān)鍵字成功地訪問(wèn)了父類的成員變量和成員方法。4.1.3super關(guān)鍵字super關(guān)鍵字的用法二(2)使用super關(guān)鍵字調(diào)用父類中指定的構(gòu)造方法,具體格式如下。super(參數(shù)1,參數(shù)2…)4.1.3super關(guān)鍵字1//定義Animal類2classAnimal{3privateStringname;4privateintage;5publicAnimal(Stringname,intage){ //Animal類有參構(gòu)造方法6=name;7this.age=age;8}......21publicStringinfo(){22return"名稱:"+this.getName()+",年齡:"+this.getAge();23}24}25//定義Dog類繼承Animal類下面通過(guò)一個(gè)案例學(xué)習(xí)如何使用super關(guān)鍵字調(diào)用父類的構(gòu)造方法,具體代碼如下所示。案例二演示4.1.3super關(guān)鍵字26classDogextendsAnimal{27privateStringcolor;28publicDog(Stringname,intage,Stringcolor){29super(name,age);//通過(guò)super關(guān)鍵字調(diào)用Animal類有兩個(gè)參數(shù)的構(gòu)造方法30this.setColor(color);31}......//省略屬性color的getter/setter方法38//重寫父類的info()方法39publicStringinfo(){40return()+",顏色:"+this.getColor();
//擴(kuò)充父類中的方法41}42}43//定義測(cè)試類44publicclassExample06{45publicstaticvoidmain(String[]args){46Dogdog=newDog("牧羊犬",3,"黑色");//創(chuàng)建Dog類的對(duì)象47System.out.println(());48}49}4.1.3super關(guān)鍵字案例二運(yùn)行結(jié)果運(yùn)行代碼,控制臺(tái)顯示的運(yùn)行結(jié)果如下圖所示。4.1.3super關(guān)鍵字案例二結(jié)果分析由上圖可知,控制臺(tái)打印了“名稱:牧羊犬,年齡:3,顏色:黑色”,說(shuō)明子類Dog使用super()成功調(diào)用了父類中有兩個(gè)參數(shù)的構(gòu)造方法,并傳遞了參數(shù)name和參數(shù)age的值,其中,參數(shù)name的值為牧羊犬,參數(shù)age的值為3。注意:通過(guò)super()調(diào)用父類構(gòu)造方法的代碼必須位于子類構(gòu)造方法的第一行,并且只能出現(xiàn)一次。4.1.3super關(guān)鍵字super與this關(guān)鍵字的作用非常相似,都可以調(diào)用構(gòu)造方法、方法和屬性,但是兩者之間還是有區(qū)別的,super與this的區(qū)別如下表所示。super與this的區(qū)別區(qū)別點(diǎn)superthis訪問(wèn)屬性直接訪問(wèn)父類中的非私有屬性訪問(wèn)本類中的屬性。如果本類中沒(méi)有該屬性,則從父類中繼續(xù)查找調(diào)用方法直接調(diào)用父類中的非私有方法調(diào)用本類中的方法。如果本類中沒(méi)有該方法,則從父類中繼續(xù)查找調(diào)用構(gòu)造方法調(diào)用父類構(gòu)造方法,必須放在子類構(gòu)造方法的首行調(diào)用本類構(gòu)造方法,必須放在構(gòu)造方法的首行注意:this和super不可以同時(shí)出現(xiàn),因?yàn)槭褂胻his和super調(diào)用構(gòu)造方法的代碼都要求必須放在構(gòu)造方法的首行。final關(guān)鍵字4.24.2.1final關(guān)鍵字修飾類
先定一個(gè)小目標(biāo)!掌握f(shuō)inal關(guān)鍵字的使用,能夠靈活使用final關(guān)鍵字修飾類。4.2.1final關(guān)鍵字修飾類1 //使用final關(guān)鍵字修飾Animal類2 finalclassAnimal{3 }4 //Dog類繼承Animal類5 classDogextendsAnimal{6 }7 //定義測(cè)試類8 publicclassExample07{9 publicstaticvoidmain(String[]args){10 Dogdog=newDog();//創(chuàng)建Dog類的對(duì)象11 }12 }Java中使用final關(guān)鍵字修飾的類不可以被繼承,也就是不能派生子類。下面通過(guò)一個(gè)案例進(jìn)行驗(yàn)證,具體代碼如下所示。案例演示4.2.1final關(guān)鍵字修飾類案例運(yùn)行結(jié)果運(yùn)行代碼,控制臺(tái)顯示的運(yùn)行結(jié)果如下圖所示。4.2.1final關(guān)鍵字修飾類案例運(yùn)行結(jié)果分析從上圖可以看出,編譯器報(bào)“無(wú)法從最終cn.itcast.Animal進(jìn)行繼承”錯(cuò)誤,說(shuō)明Dog類不能繼承使用final修飾的Animal類。由此可見(jiàn),被final關(guān)鍵字修飾的類不能被其他類繼承。4.2.2final關(guān)鍵字修飾方法
先定一個(gè)小目標(biāo)!掌握f(shuō)inal關(guān)鍵字修飾方法4.2.2final關(guān)鍵字修飾方法1 //定義Animal類2 classAnimal{3 //使用final關(guān)鍵字修飾shout()方法4 publicfinalvoidshout(){}5 }6 //定義Dog類繼承Animal類7 classDogextendsAnimal{8 //重寫Animal類的shout()方法9 publicvoidshout(){}10 }11 //定義測(cè)試類12 publicclassExample08{13 publicstaticvoidmain(String[]args){14 Dogdog=newDog();//創(chuàng)建Dog類的對(duì)象15 }16 }當(dāng)一個(gè)類的方法被final關(guān)鍵字修飾后,該類的子類將不能重寫該方法。下面通過(guò)一個(gè)案例進(jìn)行驗(yàn)證,具體代碼如下所示。案例演示4.2.2final關(guān)鍵字修飾方法案例運(yùn)行結(jié)果運(yùn)行代碼,控制臺(tái)顯示的運(yùn)行結(jié)果如下圖所示。4.2.2final關(guān)鍵字修飾方法案例運(yùn)行結(jié)果分析從上圖可以看出,使用final關(guān)鍵字修飾父類Animal中的shout()方法,在子類Dog類中重寫shout()方法時(shí),編譯報(bào)“com.itheima.Dog中的shout()無(wú)法覆蓋com.itheima.Animal中的shout()被覆蓋的方法為final”錯(cuò)誤。這是因?yàn)锳nimal類的shout()方法被final關(guān)鍵字修飾,而子類不能對(duì)final關(guān)鍵字修飾的方法進(jìn)行重寫。4.2.3final關(guān)鍵字修飾變量
先定一個(gè)小目標(biāo)!掌握f(shuō)inal關(guān)鍵字修飾變量4.2.3final關(guān)鍵字修飾變量1publicclassExample09{2 publicstaticvoidmain(String[]args){3 finalintAGE=18;//使用final關(guān)鍵字修飾的變量AGE第一次可以被賦值4 AGE=20;//再次被賦值會(huì)報(bào)錯(cuò)5 }6}Java中被final修飾的變量為常量,常量只能在聲明時(shí)被賦值一次,在后面的程序中,常量的值不能被改變。如果再次對(duì)final修飾的常量賦值,則程序會(huì)在編譯時(shí)報(bào)錯(cuò)。下面通過(guò)一個(gè)案例進(jìn)行驗(yàn)證,具體代碼如下所示。案例演示4.2.3final關(guān)鍵字修飾變量案例運(yùn)行結(jié)果運(yùn)行代碼,控制臺(tái)顯示的運(yùn)行結(jié)果如下圖所示。4.2.3final關(guān)鍵字修飾變量案例運(yùn)行結(jié)果分析從上圖可以看出,程序編譯時(shí)報(bào)錯(cuò)“無(wú)法為最終變量AGE分配值”,這是因?yàn)槭褂胒inal定義的常量本身不可被修改。注意:在使用final聲明變量時(shí),變量的名稱要求全部的字母大寫。如果一個(gè)程序中的變量使用publicstaticfinal聲明,則此變量將成為全局常量,如下面代碼所示。publicstaticfinalStringNAME="哈士奇";4.2.3final關(guān)鍵字修飾變量由上圖可知,程序編譯時(shí)報(bào)錯(cuò)“無(wú)法為最終變量AGE分配值”,這是因?yàn)槭褂胒inal定義的常量本身不可被修改。需要注意的是,在使用final聲明變量時(shí),變量的名稱要求全部的字母大寫。如果一個(gè)程序中的變量使用publicstaticfinal聲明,則此變量將成為全局常量,如下面代碼所示。publicstaticfinalStringNAME="哈士奇";抽象類和接口4.34.3.1抽象類
先定一個(gè)小目標(biāo)!掌握抽象類,能夠定義抽象類并使用非抽象類繼承抽象類4.3.1抽象類定義一個(gè)類時(shí),常常需要定義一些成員方法用于描述類的行為特征,但有時(shí)這些方法的實(shí)現(xiàn)方式是無(wú)法確定的。例如,前面定義的Animal類中的shout()方法用于描述動(dòng)物的叫聲,但是不同的動(dòng)物,叫聲也不相同,因此在shout()方法中無(wú)法準(zhǔn)確描述動(dòng)物的叫聲。針對(duì)上面描述的情況,Java提供了抽象方法來(lái)滿足這種需求。抽象方法是使用abstract關(guān)鍵字修飾的成員方法,抽象方法在定義時(shí)不需要實(shí)現(xiàn)方法體。抽象方法的語(yǔ)法格式如下。abstract返回值類型方法名稱(參數(shù)列表);抽象方法的語(yǔ)法格式4.3.1抽象類abstractclass抽象類名稱{屬性;訪問(wèn)權(quán)限返回值類型方法名稱(參數(shù)){//普通方法return[返回值];}訪問(wèn)權(quán)限abstract返回值類型抽象方法名稱(參數(shù));//抽象方法,無(wú)方法體}當(dāng)一個(gè)類包含了抽象方法,該類就是抽象類。抽象類和抽象方法一樣,必須使用abstract關(guān)鍵字進(jìn)行修飾。抽象類的語(yǔ)法格式如下。抽象類的語(yǔ)法格式4.3.1抽象類從上面抽象類的語(yǔ)法格式中可以發(fā)現(xiàn),抽象類的定義比普通類多了一個(gè)或多個(gè)抽象方法,其他地方與普通類的組成基本相同。抽象類的定義規(guī)則如下。(1)包含抽象方法的類必須是抽象類。(2)聲明抽象類和抽象方法時(shí)都要使用abstract關(guān)鍵字修飾。(3)抽象方法只需聲明而不需要實(shí)現(xiàn)。(4)如果非抽象類繼承了抽象類,那么該類必須實(shí)現(xiàn)抽象類中的全部抽象方法。抽象類的定義規(guī)則4.3.1抽象類1//定義抽象類Animal2abstractclassAnimal{3//定義抽象方法shout()4 abstractvoidshout();5}6//定義Dog類繼承抽象類Animal7classDogextendsAnimal{8//重寫抽象方法shout()9 voidshout(){10 System.out.println("汪汪...");11 }12}下面通過(guò)一個(gè)案例學(xué)習(xí)抽象類的使用,具體代碼如下所示。案例演示4.3.1抽象類13//定義測(cè)試類14publicclassExample10{15 publicstaticvoidmain(String[]args){16 Dogdog=newDog();//創(chuàng)建Dog類的對(duì)象17 dog.shout();//通過(guò)dog對(duì)象調(diào)用shout()方法18 }19}4.3.1抽象類案例運(yùn)行結(jié)果運(yùn)行代碼,控制臺(tái)顯示的運(yùn)行結(jié)果如下圖所示。4.3.1抽象類案例運(yùn)行結(jié)果分析從上圖可以看出,控制臺(tái)打印了“汪汪...”,說(shuō)明dog對(duì)象調(diào)用了Dog類中實(shí)現(xiàn)的父類Animal的抽象方法shout()。注意:使用abstract關(guān)鍵字修飾的抽象方法不能使用private關(guān)鍵字修飾,因?yàn)槌橄蠓椒ū仨氁蛔宇悓?shí)現(xiàn),如果使用了private關(guān)鍵字修飾抽象方法,則子類無(wú)法實(shí)現(xiàn)該方法。4.3.2接口
先定一個(gè)小目標(biāo)!掌握接口,能夠定義接口并通過(guò)類實(shí)現(xiàn)接口接口是一種用來(lái)定義程序的協(xié)議,它用于描述類或結(jié)構(gòu)的一組相關(guān)行為。接口是由抽象類衍生出來(lái)的一個(gè)概念,并由此產(chǎn)生了一種編程方式,可以稱這種編程方式為面向接口編程。面向接口編程就是將程序的業(yè)務(wù)邏輯進(jìn)行分離,以接口的形式去對(duì)接不同的業(yè)務(wù)模塊。接口中不實(shí)現(xiàn)任何業(yè)務(wù)邏輯,業(yè)務(wù)邏輯由接口的實(shí)現(xiàn)類來(lái)完成。當(dāng)業(yè)務(wù)需求變更時(shí),只需要修改實(shí)現(xiàn)類中的業(yè)務(wù)邏輯,而不需要修改接口中的內(nèi)容,以減少需求變更對(duì)系統(tǒng)產(chǎn)生的影響。4.3.2接口4.3.2接口下面通過(guò)現(xiàn)實(shí)生活中的的例子來(lái)類比面向接口編程。例如,鼠標(biāo)、U盤等外部設(shè)備通過(guò)USB插口來(lái)連接計(jì)算機(jī),即插即用,非常靈活。如果需要更換與計(jì)算機(jī)進(jìn)行連接的外部設(shè)備,只需要拔掉當(dāng)前USB插口上的設(shè)備,把新的設(shè)備插入即可,這就是面向接口編程的思想。4.3.2接口在Java中,使用接口的目的是為了克服單繼承的限制,因?yàn)橐粋€(gè)類只能有一個(gè)父類,而一個(gè)類可以同時(shí)實(shí)現(xiàn)多個(gè)父接口。在JDK8之前,接口是由全局常量和抽象方法組成的。JDK8對(duì)接口進(jìn)行了重新定義,接口中除了抽象方法外,還可以定義默認(rèn)方法和靜態(tài)方法,默認(rèn)方法使用default關(guān)鍵字修飾,靜態(tài)方法使用static關(guān)鍵字修飾,且這兩種方法都允許有方法體。4.3.2接口接口使用interface關(guān)鍵字聲明,語(yǔ)法格式如下。接口的語(yǔ)法格式[public]interface接口名[extends接口1,接口2...]{ [public][static][final]數(shù)據(jù)類型常量名=常量; [public][abstract]返回值的數(shù)據(jù)類型方法名(參數(shù)列表); [public]static返回值的數(shù)據(jù)類型方法名(參數(shù)列表){} [public]default返回值的數(shù)據(jù)類型方法名(參數(shù)列表){}}4.3.2接口在很多的Java程序中,經(jīng)??吹骄帉懡涌谥械姆椒〞r(shí)省略了public,有很多讀者認(rèn)為它的訪問(wèn)權(quán)限是default,這實(shí)際上是錯(cuò)誤的。不管寫不寫訪問(wèn)權(quán)限,接口中方法的訪問(wèn)權(quán)限永遠(yuǎn)是public。接口定義注意4.3.2接口接口本身不能直接實(shí)例化,接口中的抽象方法和默認(rèn)方法只能通過(guò)接口實(shí)現(xiàn)類的實(shí)例對(duì)象進(jìn)行調(diào)用。實(shí)現(xiàn)類通過(guò)implements關(guān)鍵字實(shí)現(xiàn)接口,并且實(shí)現(xiàn)類必須重寫接口中所有的抽象方法。需要注意的是,一個(gè)類可以同時(shí)實(shí)現(xiàn)多個(gè)接口,實(shí)現(xiàn)多個(gè)接口時(shí),多個(gè)接口名需要使用英文逗號(hào)(,)分隔。4.3.2接口定義接口的實(shí)現(xiàn)類,語(yǔ)法格式如下。接口實(shí)現(xiàn)類的語(yǔ)法格式修飾符class類名implements接口1,接口2,...{...}4.3.2接口第一、定義一個(gè)Animal接口,在Animal接口中定義了全局常量ID和全局常量NAME、抽象方法shout()、info()和靜態(tài)方法getID()。第二、定義一個(gè)Action接口,在Action接口中定義了一個(gè)抽象方法eat(),用于輸出信息“喜歡吃骨頭”。案例一演示下面通過(guò)一個(gè)案例學(xué)習(xí)接口的使用,由于代碼過(guò)長(zhǎng)此處不進(jìn)行展示,僅適用文字說(shuō)明代碼邏輯,請(qǐng)參考教材4.3.2節(jié)中的文件4-11。4.3.2接口第三、定義一個(gè)Dog類,Dog類通過(guò)implements關(guān)鍵字實(shí)現(xiàn)了Animal接口和Action接口,并重寫了這兩個(gè)接口中的抽象方法。第四、使用Animal接口名直接訪問(wèn)了Animal接口中的靜態(tài)方法getID(),輸出編號(hào)信息。第五、創(chuàng)建Dog類的對(duì)象dog,并通過(guò)dog對(duì)象調(diào)用了本類實(shí)現(xiàn)的Animal接口和Action接口中的info()方法、shout()方法,以及本類新增的eat()方法。4.3.2接口案例一運(yùn)行結(jié)果運(yùn)行代碼,控制臺(tái)顯示的運(yùn)行結(jié)果如下圖所示。注意:接口的實(shí)現(xiàn)類,必須實(shí)現(xiàn)接口中的所有抽象方法,否則程序編譯報(bào)錯(cuò)。4.3.2接口上述案例一演示的是類與接口之間的實(shí)現(xiàn)關(guān)系,如果在開(kāi)發(fā)中一個(gè)子類既要實(shí)現(xiàn)接口又要繼承抽象類,則可以按照以下語(yǔ)法格式定義子類。修飾符class類名extends父類名implements接口1,接口2,...{...}4.3.2接口第一、定義一個(gè)Animal接口,Animal接口中聲明了全局常量NAME(名稱)、抽象方法shout()和抽象方法info()。第二、定義一個(gè)抽象類Action,抽象類Action中定義了一個(gè)抽象方法eat()。第三、定義一個(gè)Dog類,Dog類通過(guò)extends關(guān)鍵字繼承了Action抽象類,同時(shí)通過(guò)implements實(shí)現(xiàn)了Animal接口。Dog類重寫了Animal接口和Action抽象類中的所有抽象方法,包括shout()方法、info()方法和eat()方法。第四、創(chuàng)建一個(gè)Dog類對(duì)象dog,通過(guò)對(duì)象dog分別調(diào)用info()、shout()和eat()方法。案例二演示下面演示一個(gè)類既可以實(shí)現(xiàn)接口又可以繼承抽象類的情況,由于代碼過(guò)長(zhǎng)此處不進(jìn)行展示,僅適用文字說(shuō)明代碼邏輯,請(qǐng)參考教材4.3.2節(jié)中的文件4-12。4.3.2接口案例二運(yùn)行結(jié)果運(yùn)行代碼,控制臺(tái)顯示的運(yùn)行結(jié)果如下圖所示。4.3.2接口在Java中,接口是不允許繼承抽象類的,但是允許接口繼承接口,并且一個(gè)接口可以同時(shí)繼承多個(gè)接口。下面通過(guò)一個(gè)案例講解接口的繼承,由于代碼過(guò)長(zhǎng)此處不進(jìn)行展示,僅適用文字說(shuō)明代碼邏輯,請(qǐng)參考教材4.3.2節(jié)中的文件4-13。案例三演示第一、定義一個(gè)Animal接口,Animal接口中聲明了全局常量NAME(名稱)、抽象方法info()。第二、定義一個(gè)Color接口,Color接口中定義了一個(gè)抽象方法black()。第三、定義一個(gè)接口Action并繼承接口Animal和接口Color,這樣接口Action中就同時(shí)擁有Animal接口中的info()方法、NAME屬性和Color接口中的black()方法以及本類中的shout()方法。4.3.2接口第四、定義一個(gè)Dog類并實(shí)現(xiàn)了Action接口,這樣Dog類就必須同時(shí)重寫Animal接口、中的抽象方法info()、Color接口中的抽象方法black()和Action接口中的抽象方法shout()。第五、創(chuàng)建一個(gè)Dog類的對(duì)象dog,通過(guò)對(duì)象dog調(diào)用Dog類中定義的shout()方法以及Dog類中實(shí)現(xiàn)自Action接口的info()方法和eat()方法。4.3.2接口案例三運(yùn)行結(jié)果運(yùn)行代碼,控制臺(tái)顯示的運(yùn)行結(jié)果如下圖所示。多態(tài)4.44.4.1多態(tài)概述
先定一個(gè)小目標(biāo)!熟悉多態(tài)概述,能夠說(shuō)出什么是多態(tài)4.4.1多態(tài)概述多態(tài)概述多態(tài)是面向?qū)ο笏枷胫械囊粋€(gè)非常重要的概念,在Java中,多態(tài)是指不同類的對(duì)象在調(diào)用同一個(gè)方法時(shí)表現(xiàn)出的多種不同行為。例如,要實(shí)現(xiàn)一個(gè)動(dòng)物叫聲的方法,由于每種動(dòng)物的叫聲是不同的,因此可以在方法中接收一個(gè)動(dòng)物類型的參數(shù),當(dāng)傳入貓類對(duì)象時(shí)就發(fā)出貓類的叫聲,傳入犬類對(duì)象時(shí)就發(fā)出犬類的叫聲。在同一個(gè)方法中,這種由于參數(shù)類型不同而導(dǎo)致執(zhí)行效果不同的現(xiàn)象就是多態(tài)。4.4.1多態(tài)概述Java中多態(tài)主要有以下兩種形式。(1)方法的重載。(2)對(duì)象的多態(tài)(方法的重寫)。多態(tài)的兩種形式4.4.1多態(tài)概述1//定義抽象類Animal2abstractclassAnimal{3abstractvoidshout(); //定義抽象shout()方法4}5//定義Cat類繼承Animal抽象類6classCatextendsAnimal{7 //實(shí)現(xiàn)shout()方法8 publicvoidshout(){9 System.out.println("喵喵……");10 }11}12//定義Dog類繼承Animal抽象類13classDogextendsAnimal{14//實(shí)現(xiàn)shout()方法15 publicvoidshout(){16 System.out.println("汪汪……");案例演示下面以對(duì)象的多態(tài)為例,通過(guò)一個(gè)案例演示Java程序中的多態(tài),具體代碼下所示。4.4.1多態(tài)概述17 }18}19//定義測(cè)試類20publicclassExample14{21 publicstaticvoidmain(String[]args){22 Animalan1=newCat();//創(chuàng)建Cat對(duì)象,使用Animal類型的變量an1引用23 Animalan2=newDog();//創(chuàng)建Dog對(duì)象,使用Animal類型的變量an2引用24 an1.shout();25 an2.shout();26 }27}4.4.1多態(tài)概述案例運(yùn)行結(jié)果運(yùn)行代碼,控制臺(tái)顯示的運(yùn)行結(jié)果如下圖所示。4.4.2對(duì)象類型的轉(zhuǎn)換
先定一個(gè)小目標(biāo)!掌握對(duì)象類型的轉(zhuǎn)換,能夠在多態(tài)時(shí)使用向上轉(zhuǎn)型和向下轉(zhuǎn)型完成對(duì)象類型的轉(zhuǎn)換對(duì)象向上轉(zhuǎn)型,父類對(duì)象可以調(diào)用子類重寫父類的方法,這樣當(dāng)需要新添功能時(shí),只需要新增一個(gè)子類,在子類中對(duì)父類的功能進(jìn)行擴(kuò)展,而不用更改父類的代碼,保證了程序的安全性。對(duì)于向上轉(zhuǎn)型,程序會(huì)自動(dòng)完成,對(duì)象向上轉(zhuǎn)型格式如下所示。4.4.2對(duì)象類型的轉(zhuǎn)換1.對(duì)象向上轉(zhuǎn)型對(duì)象向上轉(zhuǎn)型:父類類型父類對(duì)象=子類實(shí)例;4.4.2對(duì)象類型的轉(zhuǎn)換1//定義Anmal類2classAnimal{3publicvoidshout(){4System.out.println("喵喵……");5}6}7//定義Dog類8classDogextendsAnimal{9//重寫shout()方法10publicvoidshout(){11System.out.println("汪汪……");12}13publicvoideat(){14System.out.println("吃骨頭……");15}16}案例一演示下面通過(guò)一個(gè)案例介紹如何進(jìn)行對(duì)象的向上轉(zhuǎn)型操作,具體代碼下所示。4.4.2對(duì)象類型的轉(zhuǎn)換17//定義測(cè)試類18publicclassExample15{19publicstaticvoidmain(String[]args){20Dogdog=newDog();//創(chuàng)建Dog對(duì)象21Animalan=dog;//向上轉(zhuǎn)型22an.shout();23}24}4.4.2對(duì)象類型的轉(zhuǎn)換案例一運(yùn)行結(jié)果運(yùn)行代碼,控制臺(tái)顯示的運(yùn)行結(jié)果如下圖所示。注意:父類Animal的對(duì)象an是無(wú)法調(diào)用Dog類中的eat()方法的,因?yàn)閑at()方法只在子類中定義,而沒(méi)有在父類中定義。除了向上轉(zhuǎn)型,對(duì)象還可以向下轉(zhuǎn)型。向下轉(zhuǎn)型一般是為了重新獲得因?yàn)橄蛏限D(zhuǎn)型而丟失的子類特性。對(duì)象在進(jìn)行的向下轉(zhuǎn)型前,必須先進(jìn)行向上轉(zhuǎn)型,否則將出現(xiàn)對(duì)象轉(zhuǎn)換異常。 向下轉(zhuǎn)型時(shí),必須指明要轉(zhuǎn)型的子類類型。對(duì)象向下轉(zhuǎn)型格式如下所示。4.4.2對(duì)象類型的轉(zhuǎn)換2.對(duì)象向下轉(zhuǎn)型對(duì)象向下轉(zhuǎn)型:父類類型父類對(duì)象=子類實(shí)例;子類類型子類對(duì)象=(子類)父類對(duì)象;4.4.2對(duì)象類型的轉(zhuǎn)換......//省略定義Animal類和定義Dog類,可參考案例一17//定義測(cè)試類18publicclassExample16{19publicstaticvoidmain(String[]args){20Animalan=newDog();//此時(shí)發(fā)生了向上轉(zhuǎn)型,子類→父類21Dogdog=(Dog)an;//此時(shí)發(fā)生了向下轉(zhuǎn)型22dog.shout();23dog.eat();24}25}案例二演示下面通過(guò)一個(gè)案例介紹對(duì)象進(jìn)行向下轉(zhuǎn)型,具體代碼下所示。4.4.2對(duì)象類型的轉(zhuǎn)換案例二運(yùn)行結(jié)果運(yùn)行代碼,控制臺(tái)顯示的運(yùn)行結(jié)果如下圖所示。4.4.2對(duì)象類型的轉(zhuǎn)換注意:在向下轉(zhuǎn)型時(shí),不能直接將父類實(shí)例強(qiáng)制轉(zhuǎn)換為子類實(shí)例,否則程序會(huì)報(bào)錯(cuò)。例如,將案例二中的第20~21行代碼修改為下面一行代碼,則程序報(bào)錯(cuò)。Dogdog=(Dog)newAnimal();//編譯錯(cuò)誤4.4.3instanceof關(guān)鍵字
先定一個(gè)小目標(biāo)!掌握instanceof關(guān)鍵字,能夠使用instanceof判斷類所屬的類型上述語(yǔ)法格式中,如果“對(duì)象”是指定的類的實(shí)例對(duì)象,則返回true,否則返回false。4.4.3instanceof關(guān)鍵字Java中可以使用instanceof關(guān)鍵字判斷一個(gè)對(duì)象是否是某個(gè)類(或接口)的實(shí)例,語(yǔ)法格式如下所示。instanceof關(guān)鍵字的語(yǔ)法格式對(duì)象instanceof類(或接口)4.4.3instanceof關(guān)鍵字1//定義Animal類2classAnimal{3publicvoidshout(){4System.out.println("動(dòng)物叫……");5}6}......//省略定義Dog類,可參考4.4.3節(jié)中的案例一17//定義測(cè)試類18publicclassExample17{19publicstaticvoidmain(String[]args){20 Animala1=newDog();//通過(guò)向上轉(zhuǎn)型實(shí)例化Animal對(duì)象21 System.out.println("Animala1=newDog():"+(a1instanceofAnimal));22 System.out.println("Animala1=newDog():"+(a1instanceofDog));23 Animala2=newAnimal();//實(shí)例化Animal對(duì)象24 System.out.println("Animala2=newAnimal():"+(a2instanceofAnimal));25 System.out.println("Animala2=newAnimal():"+(a2instanceofDog));26}27}案例演示下面通過(guò)一個(gè)案例演示instanceof關(guān)鍵字的用法,具體代碼下所示。4.4.3instanceof關(guān)鍵字案例運(yùn)行結(jié)果運(yùn)行代碼,控制臺(tái)顯示的運(yùn)行結(jié)果如下圖所示。Object類4.5
先定一個(gè)小目標(biāo)!了解Object類,能夠在類中重寫Object類的toString()方法4.5Object類4.5Object類Object類Java提供了一個(gè)Object類,它是所有類的父類,每個(gè)類都直接或間接繼承了Object類,因此Object類通常被稱為超類。當(dāng)定義一個(gè)類時(shí),如果沒(méi)有使用extends關(guān)鍵字為這個(gè)類顯式地指定父類,那么該類會(huì)默認(rèn)繼承Object類。4.5Object類Object類中常用方法Object類中定義了一些常用方法,具體如下所示。方法名稱方法說(shuō)明booleanequals()判斷兩個(gè)對(duì)象是否“相等”inthashCode()返回對(duì)象的哈希值StringtoString()返回對(duì)象的字符串表示形式4.5Object類1//定義Animal類2classAnimal{3//定義動(dòng)物叫的方法4 voidshout(){ 5 System.out.println("動(dòng)物叫!");6 }7}8//定義測(cè)試類9publicclassExample18{10 publicstaticvoidmain(String[]args){11 Animalanimal=newAnimal(); //創(chuàng)建Animal類對(duì)象12 System.out.println(animal.toString()); //調(diào)用toString()方法并打印13 }14}下面通過(guò)一個(gè)案例演示Object類中toString()方法的使用,具體代碼下所示。案例一演示4.5Object類案例一運(yùn)行結(jié)果運(yùn)行代碼,控制臺(tái)顯示的運(yùn)行結(jié)果如下圖所示。4.5Object類在實(shí)際開(kāi)發(fā)中,通常情況下不會(huì)直接調(diào)用Object類中的方法,因?yàn)镺bject類中的方法并不能適用于所有的子類,這時(shí)就需要對(duì)Object類中的方法進(jìn)行重寫,以符合實(shí)際開(kāi)發(fā)需求。下面通過(guò)重寫Object類的toString()方法進(jìn)行演示。修改案例一,在Animal類中重寫toString()方法,具體代碼下所示。案例二演示1//定義Animal類2classAnimal{3//重寫Object類的toString()方法4publicStringtoString(){5 return"這是一個(gè)動(dòng)物。";6}7}......//省略測(cè)試類,參考案例一4.5Object類案例二運(yùn)行結(jié)果運(yùn)行代碼,控制臺(tái)顯示的運(yùn)行結(jié)果如下圖所示。內(nèi)部類4.64.6.1成員內(nèi)部類
先定一個(gè)小目標(biāo)!熟悉成員內(nèi)部類,能夠說(shuō)出成員內(nèi)部類的特點(diǎn)4.6.1成員內(nèi)部類在一個(gè)類中除了可以定義成員變量、成員方法,還可以定義類,這樣的類被稱作成員內(nèi)部類。成員內(nèi)部類可以訪問(wèn)外部類的所有成員,無(wú)論外部類的成員是何種訪問(wèn)權(quán)限。如果想通過(guò)外部類訪問(wèn)內(nèi)部類,則需要通過(guò)外部類創(chuàng)建內(nèi)部類對(duì)象,創(chuàng)建內(nèi)部類對(duì)象的具體語(yǔ)法格式如下:外部類名外部類對(duì)象=new外部類名();外部類名.內(nèi)部類名內(nèi)部類對(duì)象=外部類對(duì)象.new內(nèi)部類名();4.6.1成員內(nèi)部類1classOuter{2intm=0; //定義類的成員變量3//外部類方法test1()4voidtest1(){5System.out.println("外部類成員方法test1()");6}7//下面的代碼定義了一個(gè)成員內(nèi)部類Inner8classInner{9intn=1;10voidshow1(){11//在成員內(nèi)部類的方法中訪問(wèn)外部類的成員變量m12System.out.println("外部成員變量m="+m);13//在成員內(nèi)部類的方法中訪問(wèn)外部類的成員方法test1()14 test1();15}下面通過(guò)一個(gè)案例學(xué)習(xí)如何定義成員內(nèi)部類以及如何在外部類中訪問(wèn)內(nèi)部類,具體代碼如下所示。案例演示4.6.1成員內(nèi)部類16voidshow2(){17System.out.println("內(nèi)部成員方法show2()");18}19}20//外部類方法test2()21voidtest2(){ 22Innerinner=newInner(); //實(shí)例化內(nèi)部類對(duì)象inner23System.out.println("內(nèi)部成員變量n="+inner.n);//訪問(wèn)內(nèi)部類變量和方法24inner.show2();25}26}27publicclassExample20{28publicstaticvoidmain(String[]args){29Outerouter=newOuter(); //實(shí)例化外部類對(duì)象outer30Outer.Innerinner=outer.newInner(); //實(shí)例化內(nèi)部類對(duì)象inner31inner.show1(); //在內(nèi)部類中訪問(wèn)外部類的成員變量m和成員方法test1()32outer.test2(); //在內(nèi)部類中訪問(wèn)內(nèi)部類的成員變量n和成員方法show2()33}34}4.6.1成員內(nèi)部類案例運(yùn)行結(jié)果運(yùn)行代碼,控制臺(tái)顯示的運(yùn)行結(jié)果如下圖所示。4.6.2局部?jī)?nèi)部類
先定一個(gè)小目標(biāo)!熟悉局部?jī)?nèi)部類,能夠說(shuō)出局部?jī)?nèi)部類的特點(diǎn)4.6.2局部?jī)?nèi)部類局部?jī)?nèi)部類,也稱為方法內(nèi)部類,是指定義在某個(gè)局部范圍中的類,它和局部變量都是在方法中定義的,有效范圍只限于方法內(nèi)部。在局部?jī)?nèi)部類中,局部?jī)?nèi)部類可以訪問(wèn)外部類的所有成員變量和成員方法,而在外部類中無(wú)法直接訪問(wèn)局部?jī)?nèi)部類中的變量和方法。如果要在外部類中訪問(wèn)局部?jī)?nèi)部類的成員,只能在局部?jī)?nèi)部類的所屬方法中創(chuàng)建局部?jī)?nèi)部類的對(duì)象,通過(guò)對(duì)象訪問(wèn)局部?jī)?nèi)部類的變量和方法。4.6.2局部?jī)?nèi)部類1classOuter{2intm=0; //定義類的成員變量3//定義一個(gè)成員方法test1()4voidtest1(){5System.out.println("外部類成員方法test1()");6}7voidtest2(){8//定義一個(gè)局部?jī)?nèi)部類,在局部?jī)?nèi)部類中訪問(wèn)外部類變量和方法9classInner{10intn=1;11voidshow(){12System.out.println("外部成員變量m="+m);13test1();14}15}下面通過(guò)一個(gè)案例,講解局部?jī)?nèi)部類的定義以及如何訪問(wèn)局部?jī)?nèi)部類,具體代碼如下所示。案例演示4.6.2局部?jī)?nèi)部類16//訪問(wèn)局部?jī)?nèi)部類中的變量和方法17Innerinner=newInner();18System.o
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 服裝制作工安全培訓(xùn)效果水平考核試卷含答案
- 鐵合金濕法冶煉工保密水平考核試卷含答案
- 水解設(shè)備搪砌工崗前安全培訓(xùn)考核試卷含答案
- 2024年宜春職業(yè)技術(shù)學(xué)院輔導(dǎo)員考試參考題庫(kù)附答案
- 獸用中藥制劑工安全文明知識(shí)考核試卷含答案
- 銀行綜合柜員班組協(xié)作能力考核試卷含答案
- 搪瓷制品制造工道德評(píng)優(yōu)考核試卷含答案
- 光纖著色并帶工操作知識(shí)競(jìng)賽考核試卷含答案
- 糧庫(kù)中控工安全規(guī)程評(píng)優(yōu)考核試卷含答案
- 接插件零件制造工成果轉(zhuǎn)化強(qiáng)化考核試卷含答案
- 五年級(jí)上冊(cè)小數(shù)四則混合運(yùn)算練習(xí)300道及答案
- 淮安市2022-2023學(xué)年七年級(jí)上學(xué)期期末歷史試題【帶答案】
- DL-T5796-2019水電工程邊坡安全監(jiān)測(cè)技術(shù)規(guī)范
- 《民法學(xué)》教學(xué)大綱
- 低壓用戶電氣裝置規(guī)程 DGJ08-100-2003
- 中國(guó)地級(jí)市及各省份-可編輯標(biāo)色地圖
- 實(shí)驗(yàn)室生物安全培訓(xùn)-課件
- 第章交流穩(wěn)態(tài)電路
- 預(yù)應(yīng)力管樁-試樁施工方案
- GB/T 16938-2008緊固件螺栓、螺釘、螺柱和螺母通用技術(shù)條件
- FZ/T 82006-2018機(jī)織配飾品
評(píng)論
0/150
提交評(píng)論