版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第4章面向?qū)ο蟮木幊蹋ǜ呒?jí)語(yǔ)法)第4章面向?qū)ο蟮木幊蹋ǜ呒?jí)語(yǔ)法)4.1繼承和多態(tài)性的概念4.2繼承機(jī)制4.3多態(tài)性與重載4.4抽象類(lèi)4.5接口4.6包與內(nèi)部類(lèi)、匿名類(lèi)4.1.1繼承的概述繼承是一種由已有的類(lèi)創(chuàng)建新類(lèi)的機(jī)制。利用繼承,我們可以先創(chuàng)建一個(gè)共有屬性的一般類(lèi),根據(jù)該一般類(lèi)再創(chuàng)建具有特殊屬性的新類(lèi),新類(lèi)繼承一般類(lèi)的狀態(tài)和行為,并根據(jù)需要增加它自己的新的狀態(tài)和行為。由繼承而得到的類(lèi)稱為子類(lèi)(派生類(lèi)),被繼承的類(lèi)稱為父類(lèi)(基類(lèi))。Java不支持多重繼承(子類(lèi)只能有一個(gè)父類(lèi))。4.1.1繼承的概述繼承是從一個(gè)類(lèi)派生出一個(gè)新類(lèi)的過(guò)程。通過(guò)繼承,可以讓一個(gè)類(lèi)擁有(繼承)另一個(gè)類(lèi)的全部成員。動(dòng)物食草動(dòng)物食肉動(dòng)物誰(shuí)是父類(lèi)?誰(shuí)是子類(lèi)?能說(shuō)出繼承的特點(diǎn)嗎?繼承需要符合的關(guān)系:is-a,父類(lèi)更通用、子類(lèi)更具體生活中的繼承
子類(lèi)具有父類(lèi)的一般特性(包括屬性和行為),以及自身特殊的特性巴士是汽車(chē)嗎?卡車(chē)是汽車(chē)嗎?出租車(chē)是汽車(chē)嗎?最大載客數(shù)量報(bào)站引擎數(shù)量外觀顏色剎車(chē)加速汽車(chē)最大載重量卸貨所屬公司最大載客數(shù)量打發(fā)票屬性行為請(qǐng)問(wèn):出租車(chē)包含哪些屬性和行為呢?什么是多態(tài)簡(jiǎn)單來(lái)說(shuō),多態(tài)是具有表現(xiàn)多種形態(tài)的能力的特征同一個(gè)實(shí)現(xiàn)接口,使用不同的實(shí)例而執(zhí)行不同操作彩色打印機(jī)
打印機(jī)黑白打印機(jī)打印效果:彩色打印效果:黑白打印打印生活中的多態(tài)Cut….!!!聽(tīng)到這個(gè)聲音他們會(huì)做什么?剪斷頭發(fā)切開(kāi)皮膚停止表演不同對(duì)象對(duì)于同一個(gè)方法(Cut)調(diào)用的不同行為。理發(fā)師外科醫(yī)生演員4.1.2多態(tài)性的概述多態(tài)性是指對(duì)象可以表示多個(gè)類(lèi)型的能力。
JAVA中多態(tài)性主要體現(xiàn)在:指同一操作作用于不同的類(lèi)的實(shí)例,不同的類(lèi)實(shí)例將進(jìn)行不同的解釋?zhuān)詈螽a(chǎn)生不同的執(zhí)行結(jié)果。在Java語(yǔ)言中,多態(tài)性體現(xiàn)在兩個(gè)方面:方法重載實(shí)現(xiàn)的靜態(tài)多態(tài)性(編譯時(shí)多態(tài))方法重寫(xiě)實(shí)現(xiàn)的動(dòng)態(tài)多態(tài)性(也稱動(dòng)態(tài)聯(lián)編)。4.2繼承機(jī)制模擬了現(xiàn)實(shí)世界的關(guān)系實(shí)現(xiàn)代碼重用結(jié)構(gòu)更清晰Student愛(ài)好…person姓名年齡…子類(lèi)更加關(guān)注與子類(lèi)相關(guān)的行為和狀態(tài)共有屬性由父類(lèi)負(fù)責(zé)開(kāi)發(fā)教師類(lèi),其中教師分為Java教師以及.NET教師,各自的要求如下:Java教師屬性:姓名、所屬部門(mén)方法:授課(步驟:打開(kāi)MyEclipse、實(shí)施理論課授課)、自我介紹.NET教師屬性:姓名、所屬部門(mén)方法:授課(步驟:打開(kāi)Visualstudio2010、實(shí)施理論課授課)、自我介紹4.2繼承機(jī)制請(qǐng)問(wèn):以下這個(gè)解決方案中存在著什么問(wèn)題?publicclassDotNetTeacher{privateStringname;//教師姓名privateStringschool;//所在學(xué)校publicDotNetTeacher(StringmyName,StringmySchool){name=myName;school=mySchool;}publicvoidgiveLesson(){System.out.println("啟動(dòng)VS2010");System.out.println("知識(shí)點(diǎn)講解");System.out.println("總結(jié)提問(wèn)");}publicvoidintroduction(){ System.out.println("大家好!我是" +school+"的"+name+".");}}publicclassJavaTeacher{privateStringname;//教師姓名privateStringschool;//所在學(xué)校publicJavaTeacher(StringmyName,StringmySchool){name=myName;school=mySchool;}publicvoidgiveLesson(){System.out.println("啟動(dòng)
MyEclipse");System.out.println("知識(shí)點(diǎn)講解");System.out.println("總結(jié)提問(wèn)");}publicvoidintroduction(){ System.out.println("大家好!我是" +school+"的"+name+".");}}代碼存在重復(fù),違背了“writeonce,onlyonce”的原則4.2繼承機(jī)制如何改進(jìn)?有沒(méi)有可能建立繼承關(guān)系,讓子類(lèi)自動(dòng)繼承父類(lèi)的屬性和方法?Java教師是教師嗎?.NET教師是教師嗎?publicclassTeacher{privateStringname;//教師姓名privateStringschool;//所在學(xué)校publicTeacher(StringmyName,StringmySchool){name=myName;school=mySchool;}publicvoidgiveLesson(){System.out.println("知識(shí)點(diǎn)講解");System.out.println("總結(jié)提問(wèn)");}publicvoidintroduction(){ System.out.println("大家好!我是“
+school+"的"+name+"。");}}現(xiàn)在,所有子類(lèi)中相同的代碼都抽取到父類(lèi)中了屬
性行
為姓名所在學(xué)校授課自我介紹教師Java教師.NET教師4.2繼承機(jī)制publicclassJavaTeacher2extendsTeacher{publicJavaTeacher2(StringmyName,StringmySchool){super(myName,mySchool);}publicvoidgiveLesson(){System.out.println("啟動(dòng)MyEclipse");super.giveLesson();}}publicclassDotNetTeacher2extendsTeacher{publicDotNetTeacher2(StringmyName,StringmySchool){super(myName,mySchool);}publicvoidgiveLesson(){System.out.println("啟動(dòng)VS2010");super.giveLesson();}}使用繼承,可以有效實(shí)現(xiàn)代碼復(fù)用子類(lèi)自動(dòng)繼承父類(lèi)的屬性和方法,子類(lèi)中不再存在重復(fù)代碼4.2繼承機(jī)制一切類(lèi)的“祖先”——Object在Java中,所有的Java類(lèi)都直接或間接地繼承了java.lang.Object類(lèi)publicclassMyObject{//…}publicclassMyObectextendsObject{
//…}在Eclipse中調(diào)用MyObject對(duì)象的成員,會(huì)自動(dòng)彈出繼承自O(shè)bject的所有方法4.2.1繼承的定義在Java語(yǔ)言中,用extends關(guān)鍵字來(lái)表示一個(gè)類(lèi)繼承了另一個(gè)類(lèi),例如:publicclassDeriveClassextendsBaseClass{//其它代碼}基類(lèi)的公共成員被派生類(lèi)繼承后在派生類(lèi)中可以直接訪問(wèn),也可以在程序的任何地方通過(guò)派生類(lèi)的對(duì)象或派生類(lèi)名訪問(wèn);基類(lèi)的私有成員不能在派生類(lèi)中訪問(wèn),也不能通過(guò)派生類(lèi)的對(duì)象或派生類(lèi)名訪問(wèn);基類(lèi)的保護(hù)成員只能在基類(lèi)和派生類(lèi)中訪問(wèn)。在父類(lèi)中只定義一些通用的屬性與方法,例如:publicclassTeacher{privateStringname;//教師姓名privateStringschool;//所在學(xué)校publicTeacher(StringmyName,StringmySchool){//初始化屬性值}publicvoidgiveLesson(){//授課方法的具體實(shí)現(xiàn)}publicvoidintroduction(){//自我介紹方法的具體實(shí)現(xiàn)
}}4.2.1繼承的定義子類(lèi)自動(dòng)繼承父類(lèi)的屬性和方法,子類(lèi)中可以定義特定的屬性和方法publicclassTeacher{privateStringname;//教師姓名privateStringschool;//所在學(xué)校publicTeacher(StringmyName,StringmySchool){//初始化屬性值}publicvoidgiveLesson(){ //授課方法的具體實(shí)現(xiàn)}publicvoidintroduction(){ //自我介紹方法的具體實(shí)現(xiàn)
}}publicclassJavaTeacher2extendsTeacher{publicJavaTeacher2(StringmyName,StringmySchool){super(myName,mySchool);}publicvoidgiveLesson(){System.out.println("啟動(dòng)Eclipse");super.giveLesson();}}由于giveLesson()方法與父類(lèi)的實(shí)現(xiàn)有所不同,因此重寫(xiě)了該方法方法重寫(xiě):子類(lèi)和父類(lèi)的方法具有相同的名稱、參數(shù)列表、返回類(lèi)型父類(lèi)中的屬性和方法可以被子類(lèi)繼承4.2.1繼承的定義繼承的傳遞性汽車(chē)雙層單層小型卡車(chē)重型卡車(chē)同樣具有汽車(chē)的特征繼承的傳遞性卡車(chē)公共汽車(chē)還可以派生更多的類(lèi)型繼承的傳遞性publicclassVehicle{voidvehicleRun(){
System.out.println("汽車(chē)在行駛!");}}publicclassTruckextendsVehicle{
voidtruckRun(){
System.out.println("卡車(chē)在行駛!");}}繼承的傳遞性添加一個(gè)小型卡車(chē)類(lèi)publicclassSmallTruckextendsTruck{protectedvoidsmallTruckRun(){
System.out.println("微型卡車(chē)在行駛!");}
publicstaticvoidmain(String[]args){SmallTrucksmalltruck=newSmallTruck();smalltruck.vehicleRun();smalltruck.truckRun();
smalltruck.smallTruckRun();}}繼承關(guān)系父類(lèi)的父類(lèi)成員父類(lèi)的成員傳遞性1.屬性的繼承子類(lèi)可以繼承父類(lèi)的所有屬性,但是父類(lèi)的私有屬性對(duì)子類(lèi)是不可見(jiàn)的。publicclassPerson{publicStringname;publicintage;publicvoidshowInfo(){ System.out.println(“尊敬的”+name+”,您的年齡為:”+age);} }基類(lèi)4.2.2類(lèi)中屬性的繼承與隱藏publicclassStudentextendsPerson{publicstringschool;publicintengScore;publicintjavaScore;publicvoidsetInfo(){ name=“陳一”; age=20;school=“西亞斯學(xué)院”;}}派生類(lèi)屬性的繼承訪問(wèn)基類(lèi)成員子類(lèi)也可以隱藏繼承的成員變量,對(duì)于子類(lèi)可以從父類(lèi)繼承的成員變量,只要子類(lèi)中定義的成員變量和父類(lèi)中的成員變量同名時(shí),子類(lèi)就隱藏了繼承的成員變量.子類(lèi)通過(guò)成員變量的隱藏可以把父類(lèi)的狀態(tài)變?yōu)樽陨淼臓顟B(tài)。屬性的隱藏父類(lèi)中非私有方法都可以被子類(lèi)所繼承。在子類(lèi)繼承父類(lèi)的成員方法時(shí),應(yīng)注意:子類(lèi)不能訪問(wèn)父類(lèi)的private(私有)成員方法,但子類(lèi)可以訪問(wèn)父類(lèi)的public(公有)、protected(保護(hù))成員方法。protected訪問(wèn)時(shí),子類(lèi)和同一包內(nèi)的方法都能訪問(wèn)父類(lèi)的protected成員方法,但其他方法不能訪問(wèn)。4.2.3類(lèi)中方法的繼承、覆蓋與重載publicclassStudentextendsPerson{privateStringschool;privateintengScore;privateintjavaScore;
publicvoidsetScores(Strings,inte,intj){ school=s; engScore=e; javaScore=j;}}派生類(lèi)publicclassPerson{privateStringname;privateintage;publicvoidinitInfo(Stringn,inta){name=n;age=a;}publicvoidshowInfo(){ System.out.println(“尊敬的”+name+”,您的年齡為:”+age);}}基類(lèi)publicstaticvoidmain(String[]args){StudentobjStudent=newStudent();objStudent.initInfo(“王爍”,22); objStudent.showInfo(); objStudent.setScores(“清華大學(xué)”,79,92);}調(diào)用的基類(lèi)成員無(wú)需實(shí)現(xiàn)initInfo()和showInfo()方法方法的繼承方法的覆蓋(重寫(xiě))子類(lèi)通過(guò)方法的覆蓋可以隱藏繼承的方法,方法覆蓋是指:子類(lèi)中定義一個(gè)方法,并且這個(gè)方法的名字、返回類(lèi)型、參數(shù)列表與從父類(lèi)繼承的方法完全相同。注意:1.子類(lèi)的方法不能縮小父類(lèi)方法的訪問(wèn)權(quán)限2.子類(lèi)的方法不能拋出比父類(lèi)方法更多的異常3.父類(lèi)的靜態(tài)方法不能被子類(lèi)覆蓋為非靜態(tài)方法4.父類(lèi)的私有方法不能被子類(lèi)覆蓋方法的覆蓋publicclassStudentextendsPerson{privateStringschool;privateintengScore;privateintjavaScore;publicvoidsetScores(Strings,inte,intj){ school=s; engScore=e; javaScore=j;}publicvoidshowInfo(){super.showInfo();System.out.println(",英語(yǔ)成績(jī)是:"+engScore+",JAVA成績(jī)是:"+javaScore); //System.out.println(school+“的同學(xué)+name+“年齡為:”+age+“英語(yǔ)成績(jī)是:”+engScore+”,你的JAVA成績(jī)是:”+javaScore);//此行代碼錯(cuò)的原因}}覆蓋了基類(lèi)的showInfo()方法方法重載類(lèi)方法方法參數(shù)方法實(shí)現(xiàn)司機(jī)轎車(chē)巴士火車(chē)駕駛啟動(dòng)、行駛、……等待乘客上車(chē)、啟動(dòng)、行駛、到站停車(chē)、……正點(diǎn)發(fā)車(chē)、行駛、到站停車(chē)、……如果用代碼實(shí)現(xiàn),我們需要三個(gè)方法,這些方法的方法名稱相同,參數(shù)類(lèi)型不同方法重載publicintSum(intpara1,intpara2){returnpara1+para2;}整形參數(shù),返回值整型如果想讓兩個(gè)String型、兩個(gè)double型相加,怎么做?編寫(xiě)兩個(gè)不同名字的方法,這樣我們?cè)谶M(jìn)行調(diào)用時(shí)要先判斷是什么類(lèi)型,能否不判斷直接就能相加呢?方法重載對(duì)于類(lèi)的方法,如果有兩個(gè)方法的方法名相同,但參數(shù)列表不一致,那么可以說(shuō),一個(gè)方法是另一個(gè)方法的重載方法重載方法必須滿足以下條件:方法名相同。方法的參數(shù)類(lèi)型,個(gè)數(shù),順序至少有一個(gè)不同。方法的返回類(lèi)型可以不相同(與方法的返回類(lèi)型無(wú)關(guān))。方法的修飾符可以不相同(與修飾符無(wú)關(guān))。方法重載同一個(gè)類(lèi)中添加幾個(gè)名字相同,參數(shù)與返回值不同的方法publicString
Sum(String
para1,String
para2){returnpara1+para2;}publicdoubleSum(doublepara1,doublepara2){returnpara1+para2;}調(diào)用時(shí)只要傳遞參數(shù)即可,無(wú)需判斷類(lèi)型方法重載classAdd{
publicString
Sum(String
para1,String
para2){…}
publicintSum(intpara1,intpara2){…}}基于不同類(lèi)型參數(shù)的重載classAdd{
publicintSum(intpara1,intpara2){…}
publicintSum(intpara1,intpara2,intpara3){…}}相同類(lèi)型不同參數(shù)個(gè)數(shù)的重載不允許重載方法僅僅是返回值不同方法重載并不陌生System.out類(lèi)的println方法能夠打印數(shù)據(jù)并換行,根據(jù)數(shù)據(jù)類(lèi)型的不同,有多種實(shí)現(xiàn)方式publicclassTest{publicstaticvoidmain(String[]args){inti=0;charc='z';Stringstr="hello";System.out.println(i);System.out.println(c);System.out.println(str);}}PrintStreamprintln(int)println(char)println(String)……方法名相同,參數(shù)類(lèi)型不同調(diào)用不同的println方法方法重載方法重載構(gòu)造函數(shù)的重載當(dāng)實(shí)例化對(duì)象的時(shí)候,在不同的條件下,對(duì)象可能會(huì)有不同的初始化行為。對(duì)一個(gè)學(xué)生對(duì)象來(lái)說(shuō),初始的時(shí)候,有可能不知道姓名,有可能不知道年齡,有可能什么都不知道。我們可以通過(guò)對(duì)構(gòu)造函數(shù)重載,來(lái)實(shí)現(xiàn)多種初始化的行為。構(gòu)造函數(shù)的重載publicStudent(){}publicStudent(Stringname,intage,Stringschool){
=name;
this.age=age;this.hobby=hobby;}構(gòu)造函數(shù)也可以重載Studentscofield=newStudent();Studentzhang=
newStudent(“張靚靚”,20,“西亞斯學(xué)院");方法名相同,參數(shù)不同請(qǐng)編碼實(shí)現(xiàn)動(dòng)物世界的繼承關(guān)系:動(dòng)物(Animal)具有行為:吃(eat)、睡覺(jué)(sleep)動(dòng)物包括:兔子(Rabbit),老虎(Tiger)這些動(dòng)物吃的行為各不相同(兔子吃草,老虎吃肉);但睡覺(jué)的行為是一致的。請(qǐng)通過(guò)繼承實(shí)現(xiàn)以上需求,并編寫(xiě)測(cè)試類(lèi)AnimalTest進(jìn)行測(cè)試。
4.2.4在子類(lèi)中使用構(gòu)造函數(shù)子類(lèi)不能繼承父類(lèi)的構(gòu)造函數(shù)。
子類(lèi)在創(chuàng)建新對(duì)象時(shí),依次向上尋找其基類(lèi),直到找到最初的基類(lèi),然后開(kāi)始執(zhí)行最初的基類(lèi)的構(gòu)造函數(shù),再依次向下執(zhí)行派生類(lèi)的構(gòu)造函數(shù),直至執(zhí)行完最終的擴(kuò)充類(lèi)的構(gòu)造函數(shù)為止。注意:對(duì)于無(wú)參數(shù)的構(gòu)造函數(shù),執(zhí)行不會(huì)出現(xiàn)問(wèn)題。如果是帶參數(shù)的構(gòu)造函數(shù),還需要做相應(yīng)的處理。如果基類(lèi)中沒(méi)有默認(rèn)構(gòu)造函數(shù)或者希望調(diào)用帶參數(shù)的基類(lèi)構(gòu)造函數(shù),就要使用關(guān)鍵字super來(lái)顯式調(diào)用基類(lèi)構(gòu)造函數(shù)。使用關(guān)鍵字super調(diào)用基類(lèi)構(gòu)造函數(shù)的語(yǔ)句,必須是子類(lèi)構(gòu)造函數(shù)的第一個(gè)可執(zhí)行語(yǔ)句。調(diào)用基類(lèi)構(gòu)造函數(shù)時(shí)傳遞的參數(shù)不能是關(guān)鍵字this或當(dāng)前對(duì)象的非靜態(tài)成員。4.2.4在子類(lèi)中使用構(gòu)造函數(shù)默認(rèn)構(gòu)造函數(shù)默認(rèn)構(gòu)造函數(shù)指的是沒(méi)有參數(shù)的構(gòu)造函數(shù)??蔀榉謨煞N情況。(1)隱含的默認(rèn)構(gòu)造函數(shù)類(lèi)中若未定義構(gòu)造函數(shù),則JAVA系統(tǒng)自動(dòng)提供一個(gè)缺省的構(gòu)造函數(shù)。缺省的構(gòu)造函數(shù)無(wú)參,函數(shù)體為空,僅創(chuàng)建對(duì)象,不作任何初始化工作。publicPerson(){}(2)程序顯示定義的默認(rèn)構(gòu)造函數(shù)publicPerson(){ name=“無(wú)名氏”;}只要類(lèi)中定義了一個(gè)構(gòu)造函數(shù),編譯器就不再提供缺省的構(gòu)造函數(shù)隱式調(diào)用父類(lèi)的構(gòu)造函數(shù)Person類(lèi)中去掉了構(gòu)造函數(shù)publicPerson(){}“Person”方法沒(méi)有采用“0”個(gè)參數(shù)的重載classStudentextendsPerson{publicStudent(){
}
publicStudent(stringname,intage,stringschool)}super()隱式的調(diào)用super()子類(lèi)的構(gòu)造函數(shù)沒(méi)有使用super指明調(diào)用父類(lèi)哪個(gè)構(gòu)造函數(shù)父類(lèi)要提供無(wú)參的構(gòu)造函數(shù)顯示調(diào)用父類(lèi)的構(gòu)造函數(shù)如果父類(lèi)沒(méi)有無(wú)參的構(gòu)造函數(shù)子類(lèi)構(gòu)造函數(shù)必須指明調(diào)用父類(lèi)哪個(gè)構(gòu)造函數(shù)publicStudent(){
super("張靚靚",20)}publicStudent(stringname,intage,stringschool){ super(name,age)}4.2.5父類(lèi)對(duì)象與子類(lèi)對(duì)象間的使用和轉(zhuǎn)化this和super關(guān)鍵字常用來(lái)指代子類(lèi)對(duì)象與父類(lèi)對(duì)象的關(guān)鍵字。this關(guān)鍵字this是Java的一個(gè)關(guān)鍵字,表示當(dāng)前對(duì)象。this可以出現(xiàn)在實(shí)例方法和構(gòu)造方法中,但不可以出現(xiàn)在static方法中。this關(guān)鍵字出現(xiàn)在類(lèi)的構(gòu)造方法中時(shí),代表使用該構(gòu)造方法所創(chuàng)建的對(duì)象。this關(guān)鍵字出現(xiàn)在類(lèi)的實(shí)例方法中時(shí),代表正在調(diào)用該方法的當(dāng)前對(duì)象。this關(guān)鍵字classDemothis{inta;//成員變量intb;
publicDemo(inta){ this.a=a;}PublicDemo(inta,intb){this(a);this.b=b;}在成員方法定義時(shí),我們使用的形式參數(shù)與成員變量名稱相同,這時(shí)我們要用到this在某一構(gòu)造方法中調(diào)用另一構(gòu)造方法時(shí),必須使用this來(lái)調(diào)用,this關(guān)鍵字必須寫(xiě)在構(gòu)造方法內(nèi)第一行位置super關(guān)鍵字在子類(lèi)中通過(guò)super來(lái)實(shí)現(xiàn)對(duì)父類(lèi)成員的訪問(wèn)。我們知道,this用來(lái)引用當(dāng)前對(duì)象,與this類(lèi)似,super用來(lái)引用當(dāng)前對(duì)象的父類(lèi)。(1)訪問(wèn)父類(lèi)被隱藏的成員變量,如:
super.variable;(2)調(diào)用父類(lèi)中被覆蓋的方法,如:
super.Method([paramlist]);(3)調(diào)用父類(lèi)的構(gòu)造函數(shù),如:
super([paramlist]);super關(guān)鍵字classChildextendsFather{intx=1;Child(){System.out.println(super.x);}publicstaticvoidmain(Stringargs[]){newChild();//其實(shí)是super.x=0}}classFather{intx=0;}通過(guò)super關(guān)鍵字訪問(wèn)父類(lèi)中被隱藏的成員變量publicclassStudentextendsPerson{publicStudent(StringmyName,intmyAge){super(myName,myAge);}}子類(lèi)的構(gòu)造方法中,通過(guò)super關(guān)鍵字調(diào)用父類(lèi)的構(gòu)造方法方法重寫(xiě)后,通過(guò)super關(guān)鍵字調(diào)用父類(lèi)的方法publicclassStudentextendsPerson{publicvoidshowInfo(){super.showInfo();
System.out.println(",你的英語(yǔ)成績(jī)是:"+engScore+",JAVA成績(jī)是:"+javaScore");}}通過(guò)調(diào)用父類(lèi)的構(gòu)造方法,完成對(duì)屬性值的初始化super關(guān)鍵字4.3多態(tài)性在java語(yǔ)言中,多態(tài)性體現(xiàn)在兩個(gè)方面:靜態(tài)多態(tài)性是在編譯的過(guò)程中確定同名操作的具體操作對(duì)象的。(體現(xiàn)在方法的重載)動(dòng)態(tài)多態(tài)性則是在程序運(yùn)行過(guò)程中動(dòng)態(tài)地確定操作所針對(duì)的具體對(duì)象的。這種確定操作具體對(duì)象的過(guò)程就是聯(lián)編,也稱為動(dòng)態(tài)綁定。(體現(xiàn)在方法的重寫(xiě))4.3.1方法的動(dòng)態(tài)調(diào)用當(dāng)一個(gè)類(lèi)有很多子類(lèi)時(shí),并且這些子類(lèi)都重寫(xiě)了父類(lèi)中的某個(gè)方法。那么當(dāng)我們把子類(lèi)創(chuàng)建的對(duì)象的引用放到一個(gè)父類(lèi)的對(duì)象中時(shí),就得到了該對(duì)象的一個(gè)上轉(zhuǎn)型對(duì)象在通過(guò)上轉(zhuǎn)型對(duì)象在調(diào)用這個(gè)方法時(shí),程序會(huì)動(dòng)態(tài)地(在執(zhí)行時(shí))選擇正確的子類(lèi)的方法去實(shí)現(xiàn)該功能,就稱為動(dòng)態(tài)方法綁定。就可能具有多種形態(tài)。對(duì)象的上轉(zhuǎn)型對(duì)象假設(shè)B類(lèi)是A類(lèi)子類(lèi)或間接子類(lèi),當(dāng)我們用子類(lèi)B創(chuàng)建一個(gè)對(duì)象,并把這個(gè)對(duì)象的引用放到A類(lèi)的對(duì)象中時(shí):
Aa;Bb=newB();a=b;稱這個(gè)A類(lèi)對(duì)象:a,是子類(lèi)對(duì)象b的上轉(zhuǎn)型對(duì)象.對(duì)象的上轉(zhuǎn)型對(duì)象的實(shí)體是子類(lèi)負(fù)責(zé)創(chuàng)建的,但上轉(zhuǎn)型對(duì)象會(huì)失去原子類(lèi)對(duì)象的一些屬性和功能。上轉(zhuǎn)對(duì)象不能操作子類(lèi)新增的成員變量;不能使用子類(lèi)新增的方法。上轉(zhuǎn)型對(duì)象可以操作子類(lèi)繼承或隱藏成員變量,也可以使用子類(lèi)繼承的或重寫(xiě)的方法。上轉(zhuǎn)型對(duì)象操作子類(lèi)繼承或重寫(xiě)的方法時(shí),就是通知對(duì)應(yīng)的子類(lèi)對(duì)象去調(diào)用這些方法。因此,如果子類(lèi)重寫(xiě)了父類(lèi)的某個(gè)方法后,對(duì)象的上轉(zhuǎn)型對(duì)象調(diào)用這個(gè)方法時(shí),一定是調(diào)用了這個(gè)重寫(xiě)的方法??梢詫?duì)象的上轉(zhuǎn)型對(duì)象再?gòu)?qiáng)制轉(zhuǎn)換到一個(gè)子類(lèi)對(duì)象,該子類(lèi)對(duì)象又具備了子類(lèi)所有屬性和功能。對(duì)象的上轉(zhuǎn)型對(duì)象
classMammal{//哺乳動(dòng)物類(lèi)
privateintn=40;voidcrySpeak(Strings){System.out.println(s);}}publicclassMonkeyextendsMammal{//猴子類(lèi)
voidcomputer(intaa,intbb){intcc=aa*bb;System.out.println(cc);}voidcrySpeak(Strings){System.out.println("**"+s+"**");}}上轉(zhuǎn)型對(duì)象的使用publicstaticvoidmain(Stringargs[]){
//mammal是Monkey類(lèi)的對(duì)象的上轉(zhuǎn)型對(duì)象.Mammalmammal=newMonkey();mammal.crySpeak("Ilovethisgame");//puter(10,10);//把上轉(zhuǎn)型對(duì)象強(qiáng)制轉(zhuǎn)化為子類(lèi)的對(duì)象.Monkeymonkey=(Monkey)mammal;puter(10,10);}
如果子類(lèi)重寫(xiě)了父類(lèi)的方法,那么重寫(xiě)方法的調(diào)用原則如下:Java運(yùn)行時(shí)系統(tǒng)根據(jù)調(diào)用該方法的實(shí)例,來(lái)決定調(diào)用哪個(gè)方法。對(duì)子類(lèi)的一個(gè)實(shí)例,如果子類(lèi)重寫(xiě)了父類(lèi)的方法,則運(yùn)行時(shí)系統(tǒng)調(diào)用子類(lèi)的方法;如果子類(lèi)繼承了父類(lèi)的方法(未重寫(xiě)),則運(yùn)行時(shí)系統(tǒng)調(diào)用父類(lèi)的方法。實(shí)例:TestPloymoph/Test.java4.3.2方法的動(dòng)態(tài)調(diào)用classBase{publicStringname;publicBase(){name="Base";}publicBase(StringpName){name=pName;}publicvoidmethod(){System.out.println(name);}}classChildextendsBase{publicChild(){super("Child1");name="Child2";}}給定如下Java代碼,編譯運(yùn)行后,輸出結(jié)果是什么?publicclassSample{publicstaticvoidmain(String[]args){
Childc=newChild();c.method();
}}Child2控制臺(tái)輸出123給定如下Java代碼,編譯運(yùn)行后,輸出結(jié)果是什么?publicclassTeacher{publicvoidgiveLesson(){System.out.println("知識(shí)點(diǎn)講解");}}
publicclassDBTeacherextendsTeacher{publicvoidgiveLesson(){System.out.println("啟動(dòng)SqlServer");}}12publicclassTest{publicstaticvoidmain(String[]args){Teachert=newDBTeacher();t.giveLesson();}}控制臺(tái)輸出啟動(dòng)SqlServer4.4抽象類(lèi)
Java語(yǔ)言中,用abstract關(guān)鍵字來(lái)修飾一個(gè)類(lèi)時(shí),這個(gè)類(lèi)叫做抽象類(lèi)。抽象類(lèi)只關(guān)心它的子類(lèi)是否具有某種功能,并不關(guān)心該功能的具體實(shí)現(xiàn),功能的具體行為由子類(lèi)負(fù)責(zé)實(shí)現(xiàn)的。當(dāng)一個(gè)類(lèi)的定義完全表示抽象的概念時(shí),它不應(yīng)該被實(shí)例化為一個(gè)對(duì)象。例如Java中的Number類(lèi)就是一個(gè)抽象類(lèi),它只表示數(shù)字這一抽象概念,只有當(dāng)它作為整數(shù)類(lèi)Integer或?qū)崝?shù)類(lèi)Float等的父類(lèi)時(shí)才有意義。4.4.1抽象類(lèi)的定義abstractclassClassOne{ //類(lèi)實(shí)現(xiàn)}不能實(shí)例化只能用作派生類(lèi)的基類(lèi)用關(guān)鍵字abstract修飾的類(lèi)稱為抽象類(lèi)。由于抽象類(lèi)不能被實(shí)例化,因此下面的語(yǔ)句會(huì)產(chǎn)生編譯錯(cuò)誤:
ClassOnea=newClassOne();4.4.2抽象方法抽象方法只有方法頭,沒(méi)有具體的方法體。publicabstractvoidMethod();
抽象方法的一個(gè)主要目的就是為所有子類(lèi)定義一個(gè)統(tǒng)一的接口,至于方法體的具體實(shí)現(xiàn),那是由當(dāng)前類(lèi)的不同子類(lèi)在它們各自的類(lèi)定義中完成的。與final類(lèi)和方法相反,抽象類(lèi)必須被繼承,抽象方法必須被重寫(xiě)。含有抽象方法的類(lèi)必須是抽象類(lèi),不過(guò),一個(gè)抽象類(lèi)并不一定僅擁有抽象方法。4.4.2抽象方法abstractclasscfath{intx;public
abstractvoidf();//抽象方法
publiccfath(){ x=1;System.out.println(x);}}abstractclassBase{//成員變量intbasevar;//成員函數(shù)publicabstract
voidM1();
//無(wú)法實(shí)現(xiàn)
…….}classDerivedextendsBase{
//成員變量intderivedvars;
//成員函數(shù)publicvoidM1(){
//實(shí)際實(shí)現(xiàn)}抽象類(lèi)派生類(lèi)4.4.2抽象方法必須重寫(xiě)
4.4.2抽象方法繼承于抽象類(lèi)的類(lèi)一般應(yīng)該實(shí)現(xiàn)抽象類(lèi)中的所有抽象方法(重寫(xiě))。如果沒(méi)有,那么該派生類(lèi)也應(yīng)該聲明為抽象類(lèi)。 abstractclassA{ publicabstractvoidMethodA(); } classBextendsA{ //錯(cuò)誤
publicvoidMethodB(){} } classCextendsA{ publicvoidMethodA(){} }抽象類(lèi)實(shí)例:abstract/Test_abstract.java電腦主板上的PCI插槽的規(guī)范就類(lèi)似于Java接口聲卡顯卡網(wǎng)卡每種卡的內(nèi)部結(jié)構(gòu)都不相同,可以把聲卡、網(wǎng)卡、顯卡都插在PCI插槽上,而不用擔(dān)心哪個(gè)插槽是專(zhuān)門(mén)插哪個(gè)卡的主板生活中的接口:4.5JAVA語(yǔ)言中的接口生活中的接口OFFON請(qǐng)按開(kāi)關(guān)按鈕:ON/OFF兩種方法ONOFF生活中的接口ISwitchON()OFF()4.5.1JAVA語(yǔ)言中的接口接口的主要特點(diǎn)是只有聲明部分,沒(méi)有實(shí)現(xiàn)部分。接口成員的實(shí)現(xiàn)是通過(guò)類(lèi)完成的。定義在接口中的方法都是public的。需要在不相關(guān)的類(lèi)中實(shí)現(xiàn)同樣的功能時(shí),可以使用接口。接口的聲明publicinterfaceIBase{finalStringstr=常量;
voidmethod1();intmethod2(float);…….}只有聲明沒(méi)有實(shí)現(xiàn)無(wú)訪問(wèn)修飾符接口本身并不提供它所定義成員的具體實(shí)現(xiàn),它只是指定了實(shí)現(xiàn)該接口的類(lèi)或結(jié)構(gòu)必須實(shí)現(xiàn)的成員。接口的聲明接口體中包含常量和方法定義兩部分。常量定義部分定義的常量均具有public、static和final屬性。接口中只能進(jìn)行方法的聲明,不提供方法的實(shí)現(xiàn),在接口中聲明的方法具有public和abstract屬性。publicinterfacePCI{finalintvoltage=10;
publicvoidstart();
publicvoidstop();
}這是Java接口,相當(dāng)于主板上的PCI插槽的規(guī)范voltage具有publicstaticfinal修飾符接口的實(shí)現(xiàn)接口可以由類(lèi)來(lái)實(shí)現(xiàn),類(lèi)通過(guò)關(guān)鍵字implements聲明自己使用一個(gè)或多個(gè)接口。所謂實(shí)現(xiàn)接口,就是實(shí)現(xiàn)接口中聲明的方法。class類(lèi)名extends[基類(lèi)]implements接口,…,接口{ ……//成員定義部分}
接口中的方法被默認(rèn)是public,所以類(lèi)在實(shí)現(xiàn)接口方法時(shí),一定要用public來(lái)修飾。如果某個(gè)接口方法沒(méi)有被實(shí)現(xiàn),實(shí)現(xiàn)類(lèi)中必須將它聲明為抽象的,該類(lèi)當(dāng)然也必須聲明為抽象的。interfaceIMsg{ voidMessage();}publicabstractclassMyClassimplementsIMsg{
publicabstractvoidMessage();}接口的實(shí)現(xiàn)classSoundCardimplementsPCI{publicvoidstart()
{
System.out.println("Dudu...");
}
publicvoidstop()
{
System.out.println("Soundstop!");
}
}Java接口中定義的方法在不同的地方被實(shí)現(xiàn),可以具有完全不同的行為classNetworkCardimplementsPCI{publicvoidstart()
{
System.out.println("Send...");
}
publicvoidstop()
{
System.out.println("Networkstop!");
}
}聲卡、網(wǎng)卡都實(shí)現(xiàn)了PCI插槽的規(guī)范,但行為完全不同接口的實(shí)現(xiàn)接口回調(diào)接口回調(diào)是指:可以把實(shí)現(xiàn)某一接口的類(lèi)創(chuàng)建的對(duì)象的引用賦給該接口聲明的接口變量中。那么該接口變量就可以調(diào)用被類(lèi)實(shí)現(xiàn)的接口中的方法。實(shí)際上,當(dāng)接口變量調(diào)用被類(lèi)實(shí)現(xiàn)的接口中的方法時(shí),就是通知相應(yīng)的對(duì)象調(diào)用接口的方法.接口的實(shí)現(xiàn)publicclassAssembler{
publicstaticvoidmain(String[]args){
PCInc=newNetworkCard();
PCIsc=newSoundCard();
nc.start();sc.start();
}
}可以使用Java接口標(biāo)識(shí)類(lèi)型,運(yùn)行時(shí),根據(jù)實(shí)際創(chuàng)建的對(duì)象類(lèi)型調(diào)用相應(yīng)的方法實(shí)現(xiàn)Send...Dudu...控制臺(tái)輸出21接口的實(shí)現(xiàn)為學(xué)校各院系開(kāi)發(fā)這樣一個(gè)小系統(tǒng),包含類(lèi)型:教師、系部、打印機(jī),具體要求如下:教師、以及系部都具有方法:輸出詳細(xì)信息系部具有屬性:打印機(jī),能夠通過(guò)系部的打印機(jī)打印教師或系部的詳細(xì)信息系統(tǒng)要具備良好的可擴(kuò)展性與可維護(hù)性打印教師系部教師詳細(xì)信息系部詳細(xì)信息detail方法(輸出詳細(xì)信息)以下這個(gè)解決方案中存在著什么問(wèn)題?publicclassTeacher1{//輸出教員的詳細(xì)信息publicStringdetail(){ return“本人是教師";}}publicclassSchool1{privatePrinterprinter=newPrinter();//輸出系部的詳細(xì)信息publicStringdetail(){return“這里是國(guó)際教育學(xué)院";}//使用打印機(jī)打印教師信息publicvoidprint(Teacher1t){printer.print(t.detail());}//使用打印機(jī)打印系部信息publicvoidprint(School1s){ printer.print(s.detail());}}publicclassPrinter{publicvoidprint(Stringcontent){System.out.println("開(kāi)始打?。?);System.out.println(content);}}每增加一種新類(lèi)型,都需要增加相應(yīng)的print(類(lèi)型名稱var)方法——程序的可擴(kuò)展性及可維護(hù)性極差——這不符合系統(tǒng)的要求接口的實(shí)現(xiàn)可以通過(guò)多態(tài)性解決這個(gè)問(wèn)題嗎?顯然,本系統(tǒng)符合使用多態(tài)性的條件教師系部detail方法(負(fù)責(zé)輸出詳細(xì)信息)教師
詳細(xì)信息系部
詳細(xì)信息1221回顧多態(tài)的含義:實(shí)現(xiàn)同一個(gè)接口,使用不同的實(shí)例而執(zhí)行不同操作接口的實(shí)現(xiàn)在這個(gè)系統(tǒng)中,存在繼承關(guān)系嗎?教師、系部屬于兩種不同的類(lèi)型教師、系部都存在一個(gè)共同的方法特征:detail,它們對(duì)detail方法有各自不同的實(shí)現(xiàn)——這完全符合Java接口的定義定義一個(gè)Java接口,在其中定義detail方法,但沒(méi)有具體實(shí)現(xiàn)實(shí)現(xiàn)這個(gè)Java接口,不同的類(lèi)對(duì)detail方法有不同的具體實(shí)現(xiàn)IntroduceableTeacher2(教員)School2(系部)接口的實(shí)現(xiàn)publicinterfaceIntroduceable{publicStringdetail();}publicclassSchool2
implementsIntroduceable{privatePrinterprinter=newPrinter();//輸出系部的詳細(xì)信息publicStringdetail(){return“這里是國(guó)際教育學(xué)院";}//使用系部打印機(jī)打印信息publicvoidprint(Introduceableintro){ printer.print(intro.detail());}}publicclassTeacher2
implementsIntroduceable{//輸出教師的詳細(xì)信息publicStringdetail(){ return“本人是教師";}}通過(guò)Java接口,我們同樣可以享受到多態(tài)性的好處,大大提高了程序的可擴(kuò)展性及可維護(hù)性使用print方法時(shí),參數(shù)可以是任何實(shí)現(xiàn)Introduceable接口的類(lèi)的對(duì)象,不必再為不同的類(lèi)型建立不同的print方法了使用了Java接口之后,這個(gè)系統(tǒng)有了怎樣的改進(jìn)?接口的實(shí)現(xiàn)小結(jié)為剛才完成的系統(tǒng)增加一種新的類(lèi)型:學(xué)員(Student),具體要求如下:學(xué)生具有detail方法,負(fù)責(zé)輸出學(xué)員詳細(xì)信息能夠通過(guò)系部的打印機(jī)打印學(xué)員的詳細(xì)信息系統(tǒng)要具備良好的可擴(kuò)展性與可維護(hù)性編寫(xiě)測(cè)試類(lèi)StudentTest進(jìn)行測(cè)試,要求:通過(guò)中心的打印機(jī)打印學(xué)員的詳細(xì)信息4.5.2什么是面向接口編程開(kāi)發(fā)系統(tǒng)時(shí),主體構(gòu)架使用接口,接口構(gòu)成系統(tǒng)的骨架,這樣就可以通過(guò)更換接口的實(shí)現(xiàn)類(lèi)來(lái)更換系統(tǒng)的實(shí)現(xiàn)publicclassSchool2implementsIntroduceable{privatePrinterprinter=newPrinter();publicStringdetail(){return“這里是國(guó)際教育學(xué)院";}//使用系部打印機(jī)打印信息publicvoidprint(Introduceableintro){ printer.print(intro.detail());}}IntroduceableTeacher2(教師)School2(系部)面向接口編程的示例-1升級(jí)上述的系統(tǒng),要求:打印機(jī)有多種類(lèi)型,比如:黑白打印機(jī)、彩色打印機(jī)等系部可能配備其中任意一款打印機(jī),負(fù)責(zé)打印教師或者系部的詳細(xì)信息系統(tǒng)要具備良好的可擴(kuò)展性與可維護(hù)性print方法(打?。┎噬蛴C(jī)黑白打印機(jī)黑白內(nèi)容系部/教師詳細(xì)信息彩色內(nèi)容面向接口編程的示例-2采用面向接口編程的方式實(shí)現(xiàn),以下是三個(gè)步驟中的第一步:抽象出Java接口1、分析:黑白、彩色打印機(jī)都存在一個(gè)共同的方法特征:print黑白、彩色打印機(jī)對(duì)print方法有各自不同的實(shí)現(xiàn)2、結(jié)論:抽象出Java接口PrinterFace,在其中定義方法print3、具體實(shí)現(xiàn):publicinterfacePrinterFace{publicvoid
print(Stringcontent);}面向接口編程的示例-3采用面向接口編程的方式實(shí)現(xiàn),以下是三個(gè)步驟中的第二步:publicclassColorPrinter
implementsPrinterFace{publicvoid
print(Stringcontent){System.out.println("彩色打?。?);System.out.println(content);}}publicclassBlackPrinter
implementsPrinterFace{publicvoid
print(Stringcontent){System.out.println("黑白打?。?);System.out.println(content);}}實(shí)現(xiàn)Java接口1、分析:已經(jīng)抽象出Java接口PrinterFace,并在其中定義了print方法黑白、彩色打印機(jī)對(duì)print方法有各自不同的實(shí)現(xiàn)2、結(jié)論:黑白、彩色打印機(jī)都實(shí)現(xiàn)PrinterFace接口,各自實(shí)現(xiàn)print方法3、具體實(shí)現(xiàn):面向接口編程的示例-4采用面向接口編程的方式實(shí)現(xiàn),以下是三個(gè)步驟中的第三步:使用Java接口1、分析:主體構(gòu)架使用接口,讓接口構(gòu)成系統(tǒng)的骨架2、結(jié)論:更換實(shí)現(xiàn)接口的類(lèi)就可以更換系統(tǒng)的實(shí)現(xiàn)3、具體實(shí)現(xiàn):publicclassSchool3implementsIntroduceable{privatePrinterFaceprinter;//打印機(jī)
publicvoidsetPrinter(PrinterFacep){this.printer=p;}publicStringdetail(){return“這里是國(guó)際教育學(xué)院";}publicvoidprint(Introduceableintro){
printer.print(intro.detail());}}publicclassTest{publicstaticvoidmain(String[]args){//創(chuàng)建系部實(shí)例School3school=newSchool3();//為該系部配備黑白打印機(jī)
school.setPrinter(newBlackPrinter());school.print(school);//為該系部配備彩色打印機(jī)
school.setPrinter(new
ColorPrinter());school.print(school);}}小結(jié)閱讀如下Java代碼,然后請(qǐng)采用面向接口編程的思想,在空白處填寫(xiě)正確的代碼publicinterfacePCI{
void
start();
void
stop();
}classSoundCardimplementsPCI{publicvoidstart()
{
System.out.println("Dudu...");
}
publicvoidstop()
{
System.out.println("Soundstop!");
}
}classNetworkCardimplementsPCI{publicvoidstart()
{
System.out.println("Send...");
}
publicvoidstop()
{
System.out.println("Networkstop!");
}
}這是Java接口,相當(dāng)于主板上的PCI插槽的規(guī)范聲卡、網(wǎng)卡都實(shí)現(xiàn)了PCI插槽的規(guī)范,但行為完全不同小結(jié)publicclassMainBoard{
publicvoidusePCICard(______p)
{
p.start();
p.stop();
}
}publicclassAssembler{
publicstaticvoidmain(String[]args)
{
MainBoardmb=newMainBoard();
//在主板上插入網(wǎng)卡
//在主板上插入聲卡
}
}提示:通過(guò)這個(gè)方法,主板上可以插入任意符合PCI插槽規(guī)范的卡PCInc=newNetworkCard();mb.usePCICard(nc);
PCIsc=newSoundCard();
mb.usePCICard(sc);PCI提示:可以通過(guò)更換實(shí)現(xiàn)接口的類(lèi)來(lái)更換系統(tǒng)的實(shí)現(xiàn)4.6包和接口生活案例
文檔分門(mén)別類(lèi),易于查找不同內(nèi)容的文檔可以放在不同的袋子中,擁有相同的名字,避免沖突
易于管理為什么需要包4.6.1java中的包樹(shù)形文件系統(tǒng)使用目錄解決文件同名沖突問(wèn)題如何存放兩個(gè)同名的類(lèi)而不沖突?Sort.java
插入排序Sort.java
冒泡排序4.6.1java中的包包包——解決類(lèi)的同名問(wèn)題允許類(lèi)組成較小的單元(類(lèi)似文件夾),易于找到和使用相應(yīng)的文件
防止命名沖突更好的保護(hù)類(lèi)、數(shù)據(jù)和方法A.java包如何創(chuàng)建包packagecs.java.chap4;publicclassSchool{……publicStringtoString(){……}}
包名使用package聲明包,以分號(hào)結(jié)尾如果有包的聲明,一定作為Java源代碼的第一條語(yǔ)句包命名規(guī)范包名由小寫(xiě)字母組成,不能以圓點(diǎn)開(kāi)頭或結(jié)尾自己設(shè)定的包名之前最好加上唯一的前綴,通常使用組織倒置的網(wǎng)絡(luò)域名。如:域名
設(shè)定的包名部分依不同機(jī)構(gòu)各自內(nèi)部的規(guī)范不同而不同packagemypackage;package
net.javagroup.mypackage;package
net.javagroup.research.powerproject;
部門(mén)名項(xiàng)目名package.mypackage;×包與目錄的關(guān)系創(chuàng)建好的包和Java源文件是如何存儲(chǔ)的?創(chuàng)建包c(diǎn)s.java.chap4,即創(chuàng)建了目錄結(jié)構(gòu):..\cs\java\chap4Programcsjavachap4School.classHello.classSchool.java如何導(dǎo)入包為了使用不在同一包中的類(lèi),需
溫馨提示
- 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í)地理上冊(cè)階段測(cè)試試卷含答案
- 2025年北師大新版九年級(jí)地理上冊(cè)月考試卷含答案
- 2025年滬科版三年級(jí)語(yǔ)文下冊(cè)階段測(cè)試試卷含答案
- 2025年人教版(2024)四年級(jí)英語(yǔ)下冊(cè)階段測(cè)試試卷含答案
- 二零二五年度醫(yī)院消化內(nèi)科科室承包經(jīng)營(yíng)合同4篇
- 2025年滬教版八年級(jí)物理上冊(cè)月考試卷含答案
- 2025年華師大版八年級(jí)地理下冊(cè)月考試卷
- 2025年浙教版九年級(jí)化學(xué)下冊(cè)階段測(cè)試試卷
- 2025年人教B版八年級(jí)科學(xué)下冊(cè)階段測(cè)試試卷含答案
- 2025年度旅游包車(chē)客運(yùn)服務(wù)合同書(shū)-定制化旅游服務(wù)合作協(xié)議4篇
- 衡水市出租車(chē)駕駛員從業(yè)資格區(qū)域科目考試題庫(kù)(全真題庫(kù))
- 護(hù)理安全用氧培訓(xùn)課件
- 《三國(guó)演義》中人物性格探析研究性課題報(bào)告
- 注冊(cè)電氣工程師公共基礎(chǔ)高數(shù)輔導(dǎo)課件
- 土方勞務(wù)分包合同中鐵十一局
- 乳腺導(dǎo)管原位癌
- 冷庫(kù)管道應(yīng)急預(yù)案
- 司法考試必背大全(涵蓋所有法律考點(diǎn))
- 公共部分裝修工程 施工組織設(shè)計(jì)
- 《學(xué)習(xí)教育重要論述》考試復(fù)習(xí)題庫(kù)(共250余題)
- 裝飾裝修施工及擔(dān)保合同
評(píng)論
0/150
提交評(píng)論