版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第5章進(jìn)一步討論對(duì)象和類(lèi)網(wǎng)絡(luò)中心主要內(nèi)容類(lèi)的繼承1多態(tài)性2final修飾符3抽象類(lèi)4面向?qū)ο缶幊痰娜筇卣鳎悍庋b、繼承和多態(tài)。網(wǎng)絡(luò)中心主要內(nèi)容5接口6內(nèi)部類(lèi)7匿名類(lèi)網(wǎng)絡(luò)中心5.1類(lèi)的繼承人是哺乳動(dòng)物,因?yàn)槿硕季哂胁溉閯?dòng)物的所有特征,但哺乳動(dòng)物卻不一定是人。哺乳動(dòng)物類(lèi)和人類(lèi)之間就存在繼承關(guān)系(IS-A)。mammalsdogscatshumanslionstigersleopards網(wǎng)絡(luò)中心5.1類(lèi)的繼承
繼承是面向?qū)ο笕筇卣髦?,也是?shí)現(xiàn)軟件復(fù)用的重要手段。當(dāng)一個(gè)類(lèi)獲取另外一個(gè)類(lèi)中所有非私有的數(shù)據(jù)和操作的定義作為自己的部分或全部成分時(shí)。繼承的特點(diǎn)通過(guò)繼承,在已有類(lèi)型基礎(chǔ)之上進(jìn)行擴(kuò)充或改造,得到新的數(shù)據(jù)類(lèi)型。已有的類(lèi)型稱為父類(lèi)或超類(lèi)。得到的新數(shù)據(jù)類(lèi)型,稱為子類(lèi)或派生類(lèi)類(lèi)的繼承提高了程序代碼的重用性和可擴(kuò)充性,縮短了軟件開(kāi)發(fā)的周期。網(wǎng)絡(luò)中心5.1類(lèi)的繼承繼承的分類(lèi)
單繼承---------子類(lèi)只能有一個(gè)直接父類(lèi)
多重繼承------子類(lèi)可以有多個(gè)直接父類(lèi)類(lèi)A類(lèi)B類(lèi)C類(lèi)A類(lèi)BJava不支持多重繼承網(wǎng)絡(luò)中心5.1類(lèi)的繼承子類(lèi)繼承父類(lèi)的語(yǔ)法格式[修飾符]class子類(lèi)名extends父類(lèi)名{//子類(lèi)代碼部分}例
編寫(xiě)程序示范子類(lèi)繼承父類(lèi)的特點(diǎn)。publicclassAnimal{publicdoubleweight;publicvoideat(){System.out.println("動(dòng)物在吃東西");}}擴(kuò)展(繼承)網(wǎng)絡(luò)中心5.1類(lèi)的繼承publicclassDogextendsAnimal{publicvoidsay(){System.out.pringln(“狗叫:汪汪汪”);}publicstaticvoidmain(String[]args){Dogd=newDog();
d.weight=150;
d.eat();d.say();}}Dog類(lèi)中沒(méi)有定義weight屬性和eat方法,是從父類(lèi)Animal中繼承下來(lái),并且訪問(wèn)權(quán)限沒(méi)有發(fā)生變化如果定義Java類(lèi)時(shí)并未顯示指定這個(gè)類(lèi)的直接父類(lèi),則這個(gè)類(lèi)默認(rèn)擴(kuò)展java.lang.Object類(lèi)網(wǎng)絡(luò)中心5.1類(lèi)的繼承Object類(lèi)是Java程序中所有類(lèi)的直接或間接父類(lèi),也是類(lèi)庫(kù)中所有類(lèi)的父類(lèi),處在類(lèi)層次最高點(diǎn)。所有其他的類(lèi)都是從Object類(lèi)派生出來(lái)的,Object類(lèi)包含了所有Java類(lèi)的公共屬性,其構(gòu)造方法是Object()
publicfinalClassgetClass()//獲取當(dāng)前對(duì)象所屬的類(lèi)信息,返回Class對(duì)象。publicStringtoString()//按字符串對(duì)象返回當(dāng)前對(duì)象本身的有關(guān)信息。publicbooleanequals(Objectobj) //比較兩個(gè)對(duì)象是否是同一對(duì)象,是則返回tectedObjectclone() //生成當(dāng)前對(duì)象的一個(gè)拷貝,并返回這個(gè)復(fù)制對(duì)象PublicinthashCode() //返回該對(duì)象的哈希代碼值。protectedvoidfinalize()throwsThrowable//定義回收當(dāng)前對(duì)象時(shí)所需完成的資源釋放工作。網(wǎng)絡(luò)中心5.1類(lèi)的繼承示例比爾蓋子的兒子.java類(lèi)的對(duì)象可以使用其父類(lèi)中定義的公有(及保護(hù))屬性和方法,就如同在其自己的類(lèi)中定義一樣
示例TestInheritance.java子類(lèi)不能直接存取其父類(lèi)中的私有屬性及方法,但可以使用公有(及保護(hù))方法進(jìn)行存取,子類(lèi)也不能繼承父類(lèi)的構(gòu)造方法示例PhoneCard.java網(wǎng)絡(luò)中心電話卡域:剩余金額方法:撥打電話,查詢余額無(wú)卡號(hào)電話卡域:對(duì)應(yīng)電話機(jī)型方法:獲得電話機(jī)型有卡號(hào)電話卡域:卡號(hào),密碼,接入號(hào)碼,接通方法:登錄交換機(jī)電話磁卡域:使用地域方法:撥打電話電話IC卡域:方法:撥打電話IP卡域:失效日期方法:撥打電話200卡域:附加費(fèi)方法:修改密碼撥打電話繼承繼承繼承繼承繼承繼承域的繼承與隱藏子類(lèi)可以繼承父類(lèi)的所有的非私有域子類(lèi)可以重新定義一個(gè)與從父類(lèi)哪里繼承來(lái)的域變量完全相同的變量,而這樣會(huì)導(dǎo)致在子類(lèi)有兩個(gè)相同的名的變量。當(dāng)子類(lèi)執(zhí)行它自己定義的方法時(shí)所操作的就是它自己定義的變量,而把繼承父類(lèi)的變量“隱藏”起來(lái)。示例:TestHiddenField.java網(wǎng)絡(luò)中心方法的覆蓋與隱藏子類(lèi)可以繼承父類(lèi)的所有的非私有的方法子類(lèi)也可以重新定義與父類(lèi)同名的方法,實(shí)現(xiàn)對(duì)父類(lèi)方法的覆蓋(OverLoad)示例TestOverLoad.java網(wǎng)絡(luò)中心網(wǎng)絡(luò)中心5.1super父類(lèi)實(shí)例的super引用
如果需要在子類(lèi)方法中調(diào)用父類(lèi)被覆蓋的實(shí)例方法,可以用super作為調(diào)用者來(lái)調(diào)用父類(lèi)被覆蓋的實(shí)例方法。
publicclassOstrichextendsBird{……//子類(lèi)中原有的內(nèi)容publicvoidcallOverridedMethod(){super.fly();//輸出“我在飛”}
……}在子類(lèi)中想調(diào)用父類(lèi)被覆蓋的方法fly可以通過(guò)super關(guān)鍵字實(shí)現(xiàn)網(wǎng)絡(luò)中心5.1super注意:super是Java提供的一個(gè)關(guān)鍵字,它是直接父類(lèi)對(duì)象的默認(rèn)引用。正如this不能出現(xiàn)在static修飾的方法中一樣,super也不能出現(xiàn)在static的方法中如果子類(lèi)定義了和父類(lèi)同名的屬性,也會(huì)發(fā)生子類(lèi)屬性覆蓋父類(lèi)屬性的情形。子類(lèi)的方法直接訪問(wèn)該屬性時(shí),都會(huì)訪問(wèn)到覆蓋屬性,無(wú)法訪問(wèn)父類(lèi)被覆蓋的屬性---通過(guò)super來(lái)訪問(wèn)父類(lèi)被覆蓋的屬性如果我們?cè)谀硞€(gè)方法中訪問(wèn)名為a的屬性,但沒(méi)有顯示指定調(diào)用者,系統(tǒng)查找a的順序?yàn)椋翰檎以摲椒ㄖ惺欠裼忻麨閍的局部變量查找當(dāng)前類(lèi)中是否包含名為a的屬性查找a的直接父類(lèi)中是否包含名為a的屬性,依次上溯a的父類(lèi),直到j(luò)ava.lang.Object類(lèi),如果最終不能找到名為a的屬性,則系統(tǒng)出現(xiàn)編譯錯(cuò)誤。網(wǎng)絡(luò)中心5.1super調(diào)用父類(lèi)構(gòu)造方法
子類(lèi)不會(huì)繼承父類(lèi)的構(gòu)造方法,但有的時(shí)候子類(lèi)構(gòu)造方法里需要調(diào)用父類(lèi)構(gòu)造方法的初始化代碼。例寫(xiě)出下面程序的執(zhí)行結(jié)果。classBase{protecteddoublesize;
publicBase(){size=0;System.out.println(“Base類(lèi)無(wú)參構(gòu)造”);
}publicBase(doubles){size=s;System.out.println(“Base類(lèi)有參構(gòu)造”);
}}網(wǎng)絡(luò)中心5.1superpublicclassSubextendsBase{privateStringcolor;publicSub(){color=“blue”;System.out.println(“Sub類(lèi)無(wú)參構(gòu)造”);}publicSub(Stringc){color=c;System.out.println(“Sub類(lèi)有參構(gòu)造”);
}publicstaticvoidmain(String[]args){Subs1=newSub();Subs2=newSub(“red”);}}當(dāng)通過(guò)子類(lèi)構(gòu)造方法創(chuàng)建子類(lèi)對(duì)象時(shí),默認(rèn)的先執(zhí)行父類(lèi)不含參數(shù)的構(gòu)造方法,再執(zhí)行子類(lèi)類(lèi)構(gòu)造方法。網(wǎng)絡(luò)中心5.1super要在子類(lèi)中顯式調(diào)用直接父類(lèi)帶參數(shù)的構(gòu)造方法,可通過(guò)super()調(diào)用來(lái)實(shí)現(xiàn)。例如,publicSub(doubles,Stringc){super(s);//調(diào)用Base類(lèi)中帶一個(gè)參數(shù)的構(gòu)造方法color=c;System.out.println(“Sub類(lèi)有參構(gòu)造”);
}示例:Manager1.javaManager2.java注意:super調(diào)用和this調(diào)用很像,區(qū)別在于super調(diào)用的是其父類(lèi)的構(gòu)造方法,而this調(diào)用的是同一個(gè)類(lèi)中重載的構(gòu)造方法。因此,使用super調(diào)用父類(lèi)構(gòu)造也必須出現(xiàn)在子類(lèi)構(gòu)造執(zhí)行體的第一行,所以this調(diào)用和super調(diào)用不會(huì)同時(shí)出現(xiàn)。網(wǎng)絡(luò)中心5.1super子類(lèi)構(gòu)造方法調(diào)用父類(lèi)構(gòu)造方法分如下幾種情況:子類(lèi)構(gòu)造方法執(zhí)行體的第一行代碼使用super顯示調(diào)用父類(lèi)構(gòu)造方法,系統(tǒng)將根據(jù)super調(diào)用里傳入的實(shí)參列表調(diào)用父類(lèi)對(duì)應(yīng)的構(gòu)造方法。子類(lèi)構(gòu)造方法執(zhí)行體的第一行代碼使用this顯示調(diào)用本類(lèi)中重載的構(gòu)造方法,系統(tǒng)將根據(jù)this調(diào)用里傳入的實(shí)參列表調(diào)用本類(lèi)另一個(gè)構(gòu)造方法。執(zhí)行本類(lèi)中另一個(gè)構(gòu)造方法時(shí)即會(huì)調(diào)用父類(lèi)的構(gòu)造方法。子類(lèi)構(gòu)造方法執(zhí)行體中既沒(méi)有super調(diào)用,也沒(méi)有this調(diào)用,系統(tǒng)將會(huì)在執(zhí)行子類(lèi)構(gòu)造方法之前,隱式調(diào)用父類(lèi)無(wú)參數(shù)的構(gòu)造方法。網(wǎng)絡(luò)中心實(shí)驗(yàn)51.請(qǐng)按如下要求定義兩個(gè)A和B:類(lèi)A中定義一個(gè)int類(lèi)型變量z(將其賦值為16)、一個(gè)char類(lèi)型變量x(將其賦值為65)和一個(gè)方法myPrint(),該方法的功能是在屏幕上輸出z的值和x的值。類(lèi)B是類(lèi)A的子類(lèi),其中定義了一個(gè)double類(lèi)型的變量y(將其賦值為16.0)和String類(lèi)型的對(duì)象s(將其賦值為javaprogram!),還定義了兩個(gè)方法myPrint()和printAll(),方法myPrint()的功能是在屏幕上輸出y和s的值,方法printAll()的功能是分別調(diào)用父類(lèi)和子類(lèi)的myPrint()方法。編寫(xiě)應(yīng)用程序,創(chuàng)建B類(lèi)的對(duì)象b,調(diào)用printAll()方法用來(lái)顯示z、x、y、s的值。網(wǎng)絡(luò)中心上機(jī)實(shí)踐2.閱讀下面程序,回答問(wèn)題。publicclassA{ publicstaticvoidmain(String[]args){ Aa=newA(); } A(){System.out.println(“A”);} A(inti){this();System.out.println(“AA”);}}classBextendsA{ B(){super();System.out.println(“B”);} B(inti){super(i);System.out.println(“BB”);}}網(wǎng)絡(luò)中心上機(jī)實(shí)踐(1)程序輸出的結(jié)果是什么?(2)若將main()方法中的語(yǔ)句改為:Bb=newB(),程序輸出的結(jié)果是什么?(3)若將main()方法中的語(yǔ)句改為:Bb=newB(1),程序輸出的結(jié)果是什么?網(wǎng)絡(luò)中心5.1方法重寫(xiě)重寫(xiě)父類(lèi)的方法子類(lèi)擴(kuò)展父類(lèi)--總是以父類(lèi)為基礎(chǔ),額外增加新的屬性和方法。但有一種情況例外:子類(lèi)需要重寫(xiě)父類(lèi)的方法。例
子類(lèi)重寫(xiě)父類(lèi)的方法publicclassBird{publicvoidfly(){System.out.println("我在飛");}}網(wǎng)絡(luò)中心5.1方法重寫(xiě)publicclassOstrichextendsBird{//重寫(xiě)B(tài)ird類(lèi)的fly方法----方法覆蓋(override)publicvoidfly(){System.out.println("我只能在地上奔跑");}publicstaticvoidmain(String[]args){Ostrichos=newOstrich();os.fly();//調(diào)用的是Bird的fly還是Ostrich的fly?
Birdbird=newBird();bird.fly();}}重寫(xiě)父類(lèi)方法網(wǎng)絡(luò)中心5.1方法重寫(xiě)子類(lèi)重寫(xiě)父類(lèi)方法多發(fā)生在這三種情況下子類(lèi)要做與父類(lèi)不同的事情;在子類(lèi)中取消這個(gè)方法;子類(lèi)要做比父類(lèi)更多的事情。重寫(xiě)的同名方法中,子類(lèi)方法不能比父類(lèi)方法的訪問(wèn)權(quán)限更嚴(yán)格
如果父類(lèi)中方法method()的訪問(wèn)權(quán)限是public,子類(lèi)中就不能含有private的method(),否則,會(huì)出現(xiàn)編譯錯(cuò)誤。覆蓋方法和被覆蓋方法要么都是類(lèi)方法,要么都是實(shí)例方法,不能一個(gè)是類(lèi)方法,一個(gè)是實(shí)例方法。重寫(xiě)方法所拋出的異常不能比原方法更多網(wǎng)絡(luò)中心5.1方法重寫(xiě)publicclassEmployee{ Stringname; intsalary;
publicStringgetDetails(){ return"Name:"+name+"\n"+ "Salary:"+salary; }}
publicclassManagerextendsEmployee{ Stringdepartment;
publicStringgetDetails(){ return"Name:"+name+"\n"+ "Managerof"+department; }}網(wǎng)絡(luò)中心5.1方法重寫(xiě)方法重寫(xiě)(override)和方法重載(overload)的區(qū)別覆蓋是子類(lèi)和父類(lèi)之間的關(guān)系;而重載是同一類(lèi)內(nèi)部多個(gè)方法之間的關(guān)系。覆蓋一般是兩個(gè)方法間的,而重載可能有多個(gè)重載的方法。覆蓋的方法有相同的方法名和形參表;而重載的方法只能有相同的方法名,不能有相同的形參表。覆蓋時(shí)根據(jù)調(diào)用它的對(duì)象來(lái)區(qū)分方法;而重載是根據(jù)形參表來(lái)決定調(diào)用的是哪個(gè)方法。網(wǎng)絡(luò)中心5.2多態(tài)性多態(tài)機(jī)制是面向?qū)ο蠹夹g(shù)的精華之一,它是建立在繼承基礎(chǔ)之上的。所謂多態(tài)(polymorphism),子類(lèi)的對(duì)象可以代替父類(lèi)的對(duì)象使用。思想基礎(chǔ)在類(lèi)的繼承中,子類(lèi)在父類(lèi)的基礎(chǔ)上進(jìn)行擴(kuò)充和改造,父類(lèi)擁有的成員子類(lèi)中都有,因而可以認(rèn)為子類(lèi)比父類(lèi)的功能強(qiáng),或者說(shuō)子類(lèi)的對(duì)象應(yīng)該比父類(lèi)的對(duì)象功能強(qiáng),因而子類(lèi)的對(duì)象應(yīng)可以替代父類(lèi)的對(duì)象使用。方法的覆蓋實(shí)現(xiàn)多態(tài)方法的重載實(shí)現(xiàn)多態(tài)示例TestPolymorphism1.java網(wǎng)絡(luò)中心5.2多態(tài)性publicclassTest{ publicstaticvoidmain(String[]args){ Personp=newStudent();// System.out.println(p.getInfo()); }}變量p聲明為父類(lèi)Person的類(lèi)型,但實(shí)際指向的卻是子類(lèi)Student類(lèi)型的對(duì)象網(wǎng)絡(luò)中心5.2多態(tài)性一個(gè)對(duì)象只能屬于一種確定的數(shù)據(jù)類(lèi)型,該類(lèi)型自對(duì)象創(chuàng)建直至銷(xiāo)毀不能改變。一個(gè)引用類(lèi)型變量可能引用(指向)多種不同類(lèi)型的對(duì)象—既可以引用其聲明類(lèi)型的對(duì)象,也可以引用其聲明類(lèi)型的子類(lèi)的對(duì)象。子類(lèi)對(duì)象可以作為父類(lèi)對(duì)象來(lái)使用父類(lèi)對(duì)象不能被當(dāng)作是子類(lèi)的對(duì)象示例TestPolymorphism2.javaclassEmployee{…}classManagerextendsEmployee{…}classDirectorextendsManager{…}Employeeemp=newEmployee();//emp指向職工對(duì)象Employeeemp=newManager();//emp指向管理者對(duì)象Employeeemp=newDirectotr();//emp指向領(lǐng)導(dǎo)對(duì)象Managermgr=newEmployee();×網(wǎng)絡(luò)中心子類(lèi)變量不能引用父類(lèi)對(duì)象網(wǎng)絡(luò)中心5.2多態(tài)性在多態(tài)情況下,一個(gè)引用類(lèi)型的變量如果聲明為父類(lèi)的類(lèi)型,但實(shí)際引用的是子類(lèi)對(duì)象,則該變量就不能訪問(wèn)子類(lèi)中添加的屬性和方法??墒侨绻藭r(shí)調(diào)用的是父類(lèi)中聲明過(guò),且在子類(lèi)中又重寫(xiě)過(guò)的方法,情況又將如何?例
多態(tài)性示例3name、pricesetName()getName()setPrice()getPrice()show()Book類(lèi)authorsetAuthor()getAuthor()show()Novel類(lèi)網(wǎng)絡(luò)中心5.2多態(tài)性轉(zhuǎn)換對(duì)象(casting)在多態(tài)的情況下,由于對(duì)象以其父類(lèi)的身份出現(xiàn),對(duì)子類(lèi)中新添加成員的訪問(wèn)受到限制,有時(shí)我們可能需要恢復(fù)一個(gè)對(duì)象的本來(lái)面目—轉(zhuǎn)換(Casting),以發(fā)揮其全部潛力。例
多態(tài)性示例。PublicclassTest{ publicvoidcast(Personp){ //System.out.println(p.getSchool());非法
Studentst=(Student)p;//轉(zhuǎn)換 System.out.println(st.getSchool());//正確 }}在main方法中:Testt=newTest();Students=newStudent();s.setSchool(“THU”);t.cast(s);網(wǎng)絡(luò)中心5.2多態(tài)性所謂的轉(zhuǎn)換其實(shí)就是引用類(lèi)型數(shù)據(jù)值之間的強(qiáng)制類(lèi)型轉(zhuǎn)換。注意:從子類(lèi)到父類(lèi)的類(lèi)型轉(zhuǎn)換可以自動(dòng)進(jìn)行;在多態(tài)的情況下,從父類(lèi)到子類(lèi)轉(zhuǎn)換必須通過(guò)轉(zhuǎn)換(強(qiáng)制類(lèi)型轉(zhuǎn)換)實(shí)現(xiàn);無(wú)繼承關(guān)系的引用類(lèi)型間的轉(zhuǎn)換是非法的。Stringstr=“hello,world”;Personp=(Person)str;×網(wǎng)絡(luò)中心5.2多態(tài)性特別強(qiáng)調(diào):從父類(lèi)到子類(lèi)的轉(zhuǎn)換也不是都能成功—只有當(dāng)對(duì)象的真正類(lèi)型本就是子類(lèi)類(lèi)型,只是在多態(tài)的情況下,被一個(gè)聲明為父類(lèi)類(lèi)型的變量所引用,才可以進(jìn)行轉(zhuǎn)換處理,即再恢復(fù)該對(duì)象的本來(lái)面目,而一個(gè)對(duì)象如果其真正類(lèi)型就是父類(lèi)類(lèi)型,是不能被轉(zhuǎn)換為子類(lèi)類(lèi)型的。例如,Personp1=newPerson(); Studentstu=(Student)p1;//編譯沒(méi)錯(cuò),但運(yùn)行出錯(cuò)網(wǎng)絡(luò)中心5.2多態(tài)性
instanceof運(yùn)算符再看Test類(lèi)的cast方法: publicvoidcast(Personp){ //System.out.println(p.getSchool());非法
Studentst=(Student)p;//轉(zhuǎn)換 System.out.println(st.getSchool());//正確 }調(diào)用方法時(shí)如果實(shí)參是子類(lèi)Student的對(duì)象,則轉(zhuǎn)換是正確的,若實(shí)參是父類(lèi)Person的對(duì)象,則轉(zhuǎn)換失??!
if(pinstanceofStudent){
Studentst=(Student)p;st.getSchool();
}網(wǎng)絡(luò)中心5.2多態(tài)性運(yùn)算符instanceof用于檢測(cè)一個(gè)對(duì)象的真正類(lèi)型。格式:<變量名>instanceof<類(lèi)型>功能:如果instanceof操作符左側(cè)的變量當(dāng)前時(shí)刻所引用對(duì)象的真正類(lèi)型是其右側(cè)給出的類(lèi)型、或是其子類(lèi),則整個(gè)表達(dá)式結(jié)果為true,否則結(jié)果為false。示例TestPolymorphism1.java方法的重載重載不是子類(lèi)對(duì)父類(lèi)同名方法的重新定義,而是類(lèi)對(duì)自身已有的方法的重新定義.示例TestOverride5_10.java網(wǎng)絡(luò)中心構(gòu)造函數(shù)的重載一個(gè)類(lèi)可以有多個(gè)構(gòu)造函數(shù),用來(lái)完成不同的初始化任務(wù)。不同構(gòu)造函數(shù)的形式參數(shù)個(gè)數(shù)、類(lèi)型、順序不同;嚴(yán)格來(lái)說(shuō)子類(lèi)不繼承父類(lèi)的構(gòu)造函數(shù),但有一定的關(guān)系:1)如果子類(lèi)沒(méi)有構(gòu)造函數(shù),那么在創(chuàng)建子類(lèi)對(duì)象時(shí)將調(diào)用父類(lèi)無(wú)參數(shù)構(gòu)造函數(shù)2)如果子類(lèi)自己定義了構(gòu)造函數(shù),則在創(chuàng)建子類(lèi)對(duì)象時(shí),先隱含執(zhí)行父類(lèi)無(wú)參數(shù)構(gòu)造函數(shù),然后再執(zhí)行子類(lèi)的構(gòu)造函數(shù)3)如果子類(lèi)自己定義的構(gòu)造函數(shù)中,利用super關(guān)鍵字顯示調(diào)用父類(lèi)的構(gòu)造函數(shù),系統(tǒng)將不在隱含調(diào)用父類(lèi)的無(wú)參數(shù)構(gòu)造函數(shù)示例TestCons5_11.java網(wǎng)絡(luò)中心網(wǎng)絡(luò)中心上機(jī)實(shí)踐1.定義類(lèi)A和類(lèi)B如下:classA{ floatvar=1.1f; floatmethod(){ returnvar; }}classBextendsA{ floatvar=2.2; floatmethod(){returnvar;}}(1)類(lèi)A和類(lèi)B是什么關(guān)系?(2)類(lèi)A和類(lèi)B中都定義了變量var和方法method(),這種現(xiàn)象稱為什么?(3)若定義Aa=newA(),則a.var和a.method()的值是多少?(4)若定義Aa=newB(),則a.var和a.method()的值是多少?(5)若定義Aa=newB(),Bb=(B)a,則b.var和b.method()的值是多少?網(wǎng)絡(luò)中心實(shí)驗(yàn)6實(shí)驗(yàn)題目:請(qǐng)編程實(shí)現(xiàn)如下需求。樂(lè)器(Instrument)分為:鋼琴(Piano)、小提琴(Violin);這兩種樂(lè)器的彈奏(play)方法各不相同。編寫(xiě)一個(gè)測(cè)試類(lèi)InstrumentTest,
1.程序1要求:編寫(xiě)方法testPlay,對(duì)這兩種樂(lè)器進(jìn)行彈奏測(cè)試。要依據(jù)樂(lè)器的不同,進(jìn)行相應(yīng)的彈奏測(cè)試。在main()方法中進(jìn)行測(cè)試。
2.程序2要求:不使用面向?qū)ο蟮亩鄳B(tài)性,對(duì)這兩種樂(lè)器進(jìn)行彈奏測(cè)試。在main()方法中進(jìn)行測(cè)試。實(shí)驗(yàn)?zāi)康模豪斫饷嫦驅(qū)ο蟮亩鄳B(tài)性。
網(wǎng)絡(luò)中心5.3final修飾符它既可以用來(lái)修飾一個(gè)類(lèi),也可用于修飾類(lèi)中的成員變量或成員方法。用這個(gè)關(guān)鍵字進(jìn)行修飾的類(lèi)或類(lèi)的成員都是不能改變的。如果一個(gè)方法被定義為final,則不能被重寫(xiě);如果一個(gè)類(lèi)被定義為final,它不能有子類(lèi)。網(wǎng)絡(luò)中心5.3final—終極類(lèi)被標(biāo)記為final的類(lèi)將不能被繼承,這樣的類(lèi)可以稱之為終極類(lèi)(finalclass)其聲明的格式為:finalclassfinalClassName{ ........}
網(wǎng)絡(luò)中心5.3final—終極類(lèi)finalpublicclassFinalClass{ intmemberar; voidmemberMethod(){};}
classSubFinalClassextendsFinalClass{ intsubmembervar; voidsubMemberMethod(){};}
在編譯時(shí)會(huì)出現(xiàn)以下錯(cuò)誤信息:SubFinalClass.Java:7:Can'tsubclassfinalclasses:classFinalClassclassSubFinalClassextendsFinalClass{
網(wǎng)絡(luò)中心5.3final—終極方法成員方法被標(biāo)記為final成為終極方法(finalmethod),被標(biāo)記final的方法將不能被重寫(xiě)
安全考慮。這樣調(diào)用final類(lèi)型的方法時(shí)可以確保被調(diào)用的是正確的、原始的方法標(biāo)記為final有時(shí)也被用于優(yōu)化
終極方法的定義格式為:finalreturnTypefinalMethod([paramlist]){ ........}網(wǎng)絡(luò)中心5.3final—終極方法classFinalMethodClass{ finalvoidfinalMethod(){ … //原程序代碼 }}classOverloadClassextendsFinalMethodClass{ voidfinalMethod(){ //錯(cuò)誤! … //子程序代碼 }}
網(wǎng)絡(luò)中心5.3final—終極變量一個(gè)變量被標(biāo)記為final,則會(huì)使它成為一個(gè)常量
classConst{ finalfloatPI=3.14f; finalStringlanguage="Java";}
publicclassUseConst{ publicstaticvoidmain(Stringargs[]){ Constmyconst=newConst(); myconst.PI=3.1415926f; }}
在編譯時(shí)會(huì)出現(xiàn)以下錯(cuò)誤信息:UseConst.Java:9:Can'tassignavaluetoafinalvariable:PImyconst.PI=3.1415926f;網(wǎng)絡(luò)中心5.3final—終極變量將程序中可能用到的一系列常量定義在一個(gè)類(lèi)中,其他類(lèi)通過(guò)引入該類(lèi)來(lái)直接使用這些常量,保證常量使用的統(tǒng)一,修改提供方便
將一個(gè)引用類(lèi)型的變量標(biāo)記為final,那么這個(gè)變量將不能再指向其他對(duì)象,但它所指對(duì)象的取值仍然是可以改變的(寫(xiě)一個(gè)測(cè)試類(lèi))網(wǎng)絡(luò)中心5.3final—終極變量classCar{ intnumber=1234;}classFinalVariable{ publicstaticvoidmain(Stringargs[]){ finalCarmycar=newCar();
mycar.number=8888; //可以!
mycar=newCar(); //錯(cuò)誤! }}
網(wǎng)絡(luò)中心5.4抽象類(lèi)抽象方法基類(lèi)中定義的方法,有時(shí)候只有在派生類(lèi)中才能寫(xiě)出方法體。例如,ShapeTwoDimensionalShapeThreeDimensionalShapeRectangleCircleEllipseCubeSphereCylinder需定義方法area()計(jì)算面積,能寫(xiě)出合適的方法體?網(wǎng)絡(luò)中心5.4抽象類(lèi)Java中,這種沒(méi)有方法體的方法稱為抽象方法。抽象方法聲明格式:
[修飾符]
abstract
返回值類(lèi)型方法名([形式參數(shù)表]);抽象方法的特點(diǎn)抽象方法的返回值類(lèi)型前有關(guān)鍵字abstract;抽象方法沒(méi)有方法體;抽象方法的定義是一行單獨(dú)語(yǔ)句,以分號(hào)結(jié)束;在抽象方法聲明中使用static修飾符是錯(cuò)誤的。例如,publicabstractdoublearea();網(wǎng)絡(luò)中心5.4抽象類(lèi)抽象類(lèi)類(lèi)中如果定義了抽象方法,這個(gè)類(lèi)必須定義為抽象類(lèi)。[public]abstractclass類(lèi)名{//類(lèi)體(屬性、非抽象方法、抽象方法、構(gòu)造方法)//類(lèi)體(初始化塊、內(nèi)部類(lèi)、枚舉類(lèi))}抽象類(lèi)不能創(chuàng)建自己的對(duì)象,使用new創(chuàng)建抽象類(lèi)對(duì)象將產(chǎn)生錯(cuò)誤。子類(lèi)繼承抽象類(lèi)時(shí),應(yīng)該覆蓋抽象類(lèi)中的所有抽象方法,否則子類(lèi)也必須定義為抽象類(lèi)。網(wǎng)絡(luò)中心5.4抽象類(lèi)注意含有抽象方法的類(lèi)(包括直接定義了一個(gè)抽象方法;繼承了一個(gè)抽象父類(lèi),但沒(méi)有完全實(shí)現(xiàn)父類(lèi)包含的抽象方法)只能被定義成抽象類(lèi)。但抽象類(lèi)中卻并不一定包含抽象方法。抽象方法和空方法體的方法不是同一個(gè)概念
publicabstractvoidtest();
publicvoidtest(){}是一個(gè)抽象方法,它根本沒(méi)有方法體,即方法定義后面沒(méi)有一對(duì)花括號(hào)一個(gè)普通方法,定義了方法體,只是方法體為空,因此這個(gè)方法不可以使用abstract來(lái)修飾網(wǎng)絡(luò)中心5.4抽象類(lèi)例
抽象類(lèi)示例。publicabstractclassShape{publicabstractdoublecalcArea();publicShape(){}publicShape(Stringname){ System.out.println(name+"ShapeCreated");}publicStringtoString(){ System.out.println(“thisisShape!”);}}抽象方法構(gòu)造方法不用于創(chuàng)建Shape對(duì)象,而是用于被子類(lèi)調(diào)用抽象類(lèi),不能實(shí)例化的網(wǎng)絡(luò)中心5.4抽象類(lèi)publicclassCircleextendsShape{publicfloatr;privatefinalfloatPI=3.14;publicCircle(Stringname,floatr){ super(name); this.r=r;}publicfloatcalcArea(){ returnPI*r*r;}}子類(lèi)Circle,必須重寫(xiě)Shape類(lèi)中的抽象方法,否則Circle就是一個(gè)抽象類(lèi)網(wǎng)絡(luò)中心5.4抽象類(lèi)注意final和abstract永遠(yuǎn)不能同時(shí)使用。abstract不能用于修飾屬性,不能用于修飾局部變量,即沒(méi)有抽象變量、沒(méi)有抽象屬性等說(shuō)法;abstract也不能用于修飾構(gòu)造方法,沒(méi)有抽象構(gòu)造方法。抽象類(lèi)里定義的構(gòu)造方法只能是普通構(gòu)造方法。static和abstract不能同時(shí)修飾某個(gè)方法,即沒(méi)有所謂的類(lèi)抽象方法。abstract關(guān)鍵字修飾的方法必須被其子類(lèi)重寫(xiě)才有意義,否則這個(gè)方法將永遠(yuǎn)不會(huì)有方法體,因此abstract方法不能定義為private訪問(wèn)權(quán)限。網(wǎng)絡(luò)中心5.4抽象類(lèi)抽象類(lèi)的作用代碼重用--子類(lèi)可以重用抽象父類(lèi)中的屬性和非抽象方法;規(guī)劃--抽象類(lèi)中通過(guò)定義抽象方法規(guī)劃了其所有子類(lèi)必須要實(shí)現(xiàn)的功能,或者說(shuō)指定了其子類(lèi)對(duì)象與外界的交互界面,因?yàn)槌橄蠓椒ǖ姆椒^部分已經(jīng)規(guī)定了該方法將來(lái)被子類(lèi)對(duì)象調(diào)用的格式。模板模式的設(shè)計(jì)網(wǎng)絡(luò)中心5.4抽象類(lèi)模板模式:抽象類(lèi)作為多個(gè)子類(lèi)的通用模板,子類(lèi)在抽象類(lèi)的基礎(chǔ)上擴(kuò)展、改造,但子類(lèi)總體上會(huì)保留抽象類(lèi)的行為方式。抽象類(lèi)不能實(shí)例化,但抽象類(lèi)可作為變量的類(lèi)型和方法形參類(lèi)型,可將抽象類(lèi)子類(lèi)的對(duì)象賦給該變量或做方法的實(shí)參。例如,
Shapes=newRectangle();
publicstaticStringShowShapinfo(Shapeitem){
if(iteminstanceofRectangle){
Rectangler=(Rectangle)item;//其他代碼
}
}網(wǎng)絡(luò)中心5.5接口接口是另一種定義數(shù)據(jù)類(lèi)型的方式。它和類(lèi)非常相似的。相同之處:都有成員變量和成員方法也可以形成繼承關(guān)系不同之處:接口中的屬性都是常量(final)接口中的方法是抽象方法(沒(méi)有方法體)引入接口的原因:Java只支持單重繼承,每個(gè)類(lèi)只能有一個(gè)超類(lèi)。但實(shí)際應(yīng)用中有時(shí)候需要多重繼承--使用接口,一個(gè)類(lèi)可以實(shí)現(xiàn)多個(gè)接口。接口的概念類(lèi)比:計(jì)算機(jī)的USB口網(wǎng)絡(luò)中心5.5接口接口的定義[public]interface
接口名[implements
父接口1,父接口2,…]{
[public][static][final]數(shù)據(jù)類(lèi)型屬性名=常量值;
[publicabstract]返回值類(lèi)型方法名([形參表]);}表示可以被不同包中的類(lèi)或接口使用,缺省時(shí)具有包內(nèi)可訪問(wèn)性interface關(guān)鍵字表示接口任意有效標(biāo)識(shí)符接口支持多繼承,多個(gè)父接口之間用逗號(hào)分隔接口的屬性必須用publicstaticfinal修飾,是系統(tǒng)默認(rèn)的,可部分省略或全部省略,但一般都寫(xiě)出final。
intMAX_SIZE=50;等價(jià)于
publicstaticfinal
intMAX_SIZE=50;接口的方法默認(rèn)為publicabstract,一般不寫(xiě)修飾符,可省略--接口中的方法都是抽象方法。網(wǎng)絡(luò)中心5.5接口例
接口的定義。interfacePCI{//定義了一個(gè)PCI接口
publicvoidstart();//定義了一個(gè)開(kāi)始的方法
publicvoidstop();//定義了一個(gè)結(jié)束的方法,默認(rèn)都是抽象方法。}
示例:NetworkCard.javaUsePCI.java
接口定義后不能直接創(chuàng)建對(duì)象,必須由類(lèi)實(shí)現(xiàn)接口后創(chuàng)建類(lèi)的對(duì)象。每個(gè)類(lèi)只能繼承一個(gè)基類(lèi),但可以實(shí)現(xiàn)多個(gè)接口。類(lèi)定義形式如下:網(wǎng)絡(luò)中心5.5接口[public]class類(lèi)名extends基類(lèi)implements
接口1,…{
//類(lèi)體}注意:類(lèi)實(shí)現(xiàn)接口,就繼承了接口中的所有成員變量和成員方法。由于接口中的方法都是抽象的,因此實(shí)現(xiàn)接口的類(lèi)必須重寫(xiě)這些方法。classSoundCardimplementsPCI{//聲卡publicvoidstart(){System.out.println("Dudu...");
}publicvoidstop(){System.out.println("Soundstop!");
}}可實(shí)現(xiàn)多個(gè)接口,多個(gè)接口之間用逗號(hào)分隔網(wǎng)絡(luò)中心5.5接口注意:實(shí)現(xiàn)接口中的抽象方法時(shí),除去掉關(guān)鍵字abstract外,方法頭必須和接口定義中的方法頭完全相同,并且public修飾符不能省略。如果類(lèi)實(shí)現(xiàn)了多個(gè)接口,必須重寫(xiě)這些接口中的所有方法。接口不是類(lèi),不能使用new實(shí)例化接口,但可以聲明接口變量。接口變量可以指向一個(gè)實(shí)現(xiàn)了該接口的類(lèi)的對(duì)象,例如,
PCIs=newPCI();//錯(cuò)
PCIs=newSoundCard();//對(duì)
網(wǎng)絡(luò)中心5.5接口可以使用instanceof來(lái)判斷對(duì)象是否實(shí)現(xiàn)了某個(gè)接口。雖然可以使用接口變量來(lái)引用實(shí)現(xiàn)接口類(lèi)的對(duì)象,但這種引用只能引用接口的成員,否則會(huì)發(fā)生編譯錯(cuò)誤。例如,PCInet=newNetworkCard();PCIsound=newSoundCard();net.start();sound.start();調(diào)用的是同一方法嗎?多態(tài)強(qiáng)調(diào):一個(gè)接口定義一個(gè)協(xié)定,實(shí)現(xiàn)接口的類(lèi)必須遵守其協(xié)定。接口最適合為不相關(guān)的類(lèi)提供通用功能,利用接口提供的方法,程序可以多態(tài)地處理這些完全不同的類(lèi)的對(duì)象。網(wǎng)絡(luò)中心5.5接口接口的繼承接口具有多重繼承的特點(diǎn),即一個(gè)接口可以有多個(gè)父接口。新的子接口繼承所有父接口的全部方法和常量。接口繼承的格式為:[public]interface子接口extends
父接口{//靜態(tài)屬性;
//抽象方法;}網(wǎng)絡(luò)中心5.5接口程序InterfaceTester接口應(yīng)用實(shí)例。定義一個(gè)接口Shape2D,可利用它來(lái)實(shí)現(xiàn)二維的幾何形狀類(lèi)Circle和Rectangle網(wǎng)絡(luò)中心5.5接口接口和抽象類(lèi)接口和抽象類(lèi)很像,它們都具有如下特征:接口和抽象類(lèi)都不能被實(shí)例化,它們都位于繼承樹(shù)的頂端,用于被其他類(lèi)實(shí)現(xiàn)和繼承。接口和抽象類(lèi)都可以包含抽象方法,實(shí)現(xiàn)接口或繼承抽象類(lèi)的普通子類(lèi)都必須實(shí)現(xiàn)這些抽象方法。區(qū)別設(shè)計(jì)目的不同接口體現(xiàn)的是一種規(guī)范,類(lèi)似于整個(gè)系統(tǒng)的“總綱”,它制定了系統(tǒng)各模塊應(yīng)該遵循的標(biāo)準(zhǔn)。因此一個(gè)系統(tǒng)中的接口不應(yīng)該經(jīng)常改變抽象類(lèi)作為多個(gè)子類(lèi)的共同父類(lèi),體現(xiàn)的是模板式設(shè)計(jì)。抽象類(lèi)可以被當(dāng)成系統(tǒng)實(shí)現(xiàn)過(guò)程中的中間產(chǎn)品,這個(gè)中間產(chǎn)品已經(jīng)實(shí)現(xiàn)了部分功能,但這個(gè)產(chǎn)品還不能當(dāng)成最終產(chǎn)品,必須更進(jìn)一步的完善,這種完善可能有幾種不同方式。網(wǎng)絡(luò)中心5.5接口用法不同(1)接口里只能包含抽象方法(2)接口里不能定義靜態(tài)方法(3)接口里只能定義靜態(tài)常量屬性(4)接口不包含構(gòu)造方法(5)一個(gè)類(lèi)可以實(shí)現(xiàn)多個(gè)接口(1)抽象類(lèi)可以包含普通方法。(2)抽象類(lèi)可以定義靜態(tài)方法
(3)抽象類(lèi)既包含普通屬性,也可以包含靜態(tài)常量屬性
(4)抽象類(lèi)里構(gòu)造方法不用于創(chuàng)建對(duì)象,是讓子類(lèi)調(diào)用(5)一個(gè)只能繼承一個(gè)父類(lèi)網(wǎng)絡(luò)中心5.5接口-實(shí)例軟件項(xiàng)目開(kāi)發(fā)數(shù)據(jù)庫(kù)操作功能模塊1前臺(tái)頁(yè)面接口功能模塊2功能模塊3網(wǎng)絡(luò)中心5.5接口SqlserverDataOperate、MysqlDataOperate,分別代表Oracle、Sqlserver、Mysql這三種數(shù)據(jù)庫(kù)的操作類(lèi)。DataOperate是上面說(shuō)的數(shù)據(jù)操作類(lèi)的統(tǒng)一接口,只有兩個(gè)方法:取得一條記錄、插入一條記錄。DataOperateFactory是一個(gè)工廠方法,統(tǒng)一用它的方法來(lái)得到數(shù)據(jù)庫(kù)操作類(lèi)的實(shí)例。SampleClass是我們系統(tǒng)的某個(gè)功能模塊的類(lèi)。people是一個(gè)實(shí)體類(lèi),代表一條記錄。三個(gè)字段oid唯一標(biāo)識(shí)符、name姓名、date生日。網(wǎng)絡(luò)中心5.5接口public
interface
DataOperate
{
//根據(jù)記錄的唯一標(biāo)識(shí)取出一條記錄
People
getPeople(String
oid);
//插入一條記錄
boolean
insertPeople(People
people);
}
網(wǎng)絡(luò)中心5.5接口OracleDataOperate、SqlserverDataOperate、MysqlDataOperate都是繼承DataOperate接口public
class
MysqlDataOperateimplementsDataOperate
{
//根據(jù)記錄的唯一標(biāo)識(shí)取出一條記錄
People
getPeople(String
oid){ //讀取Mysql數(shù)據(jù)庫(kù)的People表,返回該記錄
}
//插入一條記錄
boolean
insertPeople(People
people){ //讀取Mysql數(shù)據(jù)庫(kù)的People表,插入一條記錄}
}
網(wǎng)絡(luò)中心5.5接口功能模塊中如何操作數(shù)據(jù)庫(kù)呢?/***系統(tǒng)某個(gè)功能類(lèi)*/publicclassSampleClass{/**某方法*/publicvoidsampleMethod(){DataOperatedb=newMysqlDataOperate();
Peoplep=db.getPeople("123");//取得一條記錄db.insertPeople(p);//再插回去}}有何不足?網(wǎng)絡(luò)中心5.5接口publicclassDataOperateFactory{publicstaticfinalintORACLE=0;//定義三個(gè)表示數(shù)據(jù)庫(kù)類(lèi)型的常量publicstaticfinalintMYSQL=1;publicstaticfinalintSQLSERVER=2;
privatestaticDataOperatedb;privatestaticintdataType=1;/***@return返回的是接口,客戶端不必關(guān)心具體是用哪個(gè)實(shí)現(xiàn)類(lèi)*/publicstaticDataOperategetInstance(){if(db==null){if(dataType==ORACLE)//根據(jù)dateType返回相應(yīng)的實(shí)現(xiàn)類(lèi)returnnewOracelDataOperate();if(dataType==MYSQL)returnnewMysqlDataOperate();if(dataType==SQLSERVER)returnnewSqlserverDataOperate();}returndb;}}網(wǎng)絡(luò)中心5.5接口/***系統(tǒng)某個(gè)功能類(lèi)*/publicclassSampleClass{privateDataOperatedb;//聲明一個(gè)數(shù)據(jù)庫(kù)操作類(lèi),注意這里用的是接口/**某方法*/publicvoidsampleMethod(){db=DataOperateFactory.getInstance();//得到單一實(shí)例Peoplep=db.getPeople("123");//取得一條記錄db.insertPeople(p);//再插回去}}網(wǎng)絡(luò)中心上機(jī)實(shí)踐1.定義一個(gè)接口,接口中有三個(gè)抽象方法:longfactorial(intm);//求參數(shù)的階乘longmyPower(intm,intn);//求參數(shù)m的n次方booleanfindFactorSum(intm,intn);//判斷參數(shù)中較小數(shù)是否是較大數(shù)的因子定義類(lèi)實(shí)現(xiàn)該接口。編寫(xiě)應(yīng)用程序,調(diào)用接口中的三個(gè)方法,并將調(diào)用這些方法得到的結(jié)果輸出。網(wǎng)絡(luò)中心5.6內(nèi)部類(lèi)一個(gè)Java程序就是一個(gè)類(lèi)的集合。程序中的類(lèi)有兩種排列結(jié)構(gòu)。類(lèi)1Java程序類(lèi)2類(lèi)n……外部類(lèi)Java程序內(nèi)部類(lèi)類(lèi)k……在一個(gè)類(lèi)中定義其它類(lèi)網(wǎng)絡(luò)中心5.6內(nèi)部類(lèi)例如:classEnclosingClass{
……classANestedClass{
……
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年人教五四新版九年級(jí)科學(xué)下冊(cè)月考試卷含答案
- 2024 四川公務(wù)員考試行測(cè)真題(綜合管理崗)
- 二零二五年度農(nóng)機(jī)維修保養(yǎng)及零配件供應(yīng)合同4篇
- 2025年度美團(tuán)騎手服務(wù)規(guī)范及考核評(píng)價(jià)合同3篇
- 2025年度特色餐廳廚房承包項(xiàng)目合同4篇
- 2025年度奶業(yè)市場(chǎng)調(diào)研與競(jìng)爭(zhēng)分析合同4篇
- 拆除金屬?gòu)U物回收利用合同(2篇)
- 二零二五年度icp許可證申請(qǐng)與互聯(lián)網(wǎng)企業(yè)品牌建設(shè)合同3篇
- 二零二五年度儲(chǔ)藏室租賃合同終止及資產(chǎn)返還協(xié)議4篇
- 2025年度食品級(jí)儲(chǔ)藏室設(shè)計(jì)與建造合同3篇
- 四川省成都市武侯區(qū)2023-2024學(xué)年九年級(jí)上學(xué)期期末考試化學(xué)試題
- 2024年秋季人教版七年級(jí)上冊(cè)生物全冊(cè)教學(xué)課件(2024年秋季新版教材)
- 環(huán)境衛(wèi)生學(xué)及消毒滅菌效果監(jiān)測(cè)
- 2024年共青團(tuán)入團(tuán)積極分子考試題庫(kù)(含答案)
- 碎屑巖油藏注水水質(zhì)指標(biāo)及分析方法
- 【S洲際酒店婚禮策劃方案設(shè)計(jì)6800字(論文)】
- 鐵路項(xiàng)目征地拆遷工作體會(huì)課件
- 醫(yī)院死亡報(bào)告年終分析報(bào)告
- 中國(guó)教育史(第四版)全套教學(xué)課件
- 2023年11月英語(yǔ)二級(jí)筆譯真題及答案(筆譯實(shí)務(wù))
- 上海民辦楊浦實(shí)驗(yàn)學(xué)校初一新生分班(摸底)語(yǔ)文考試模擬試卷(10套試卷帶答案解析)
評(píng)論
0/150
提交評(píng)論