《Java語言編程基礎(chǔ)立體化實用教程》教案-2.2 學生成績操作接口的實現(xiàn)_第1頁
《Java語言編程基礎(chǔ)立體化實用教程》教案-2.2 學生成績操作接口的實現(xiàn)_第2頁
《Java語言編程基礎(chǔ)立體化實用教程》教案-2.2 學生成績操作接口的實現(xiàn)_第3頁
《Java語言編程基礎(chǔ)立體化實用教程》教案-2.2 學生成績操作接口的實現(xiàn)_第4頁
《Java語言編程基礎(chǔ)立體化實用教程》教案-2.2 學生成績操作接口的實現(xiàn)_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

山東理工職業(yè)學院單元教學過程設(shè)計首頁課程所屬院(部):軟件工程學院2019--2020學年第一學期課程名稱Java語言編程基礎(chǔ)任課教師單元標題項目二任務(wù)2學生成績類操作接口的實現(xiàn)上課地點學時6授課班級授課時間第周第周第周第周第周第周星期星期星期星期星期星期第節(jié)第節(jié)第節(jié)第節(jié)第節(jié)第節(jié)月日月日月日月日月日月日教學目標能力目標知識目標1.能掌握利用接口編寫程序的方法1.了解接口的概念和意義;2.掌握定義接口和實現(xiàn)接口的方法;3.掌握定義數(shù)據(jù)表操作接口的方法;4.掌握實現(xiàn)數(shù)據(jù)表接口的方法。教學任務(wù)通過接口提供的方法來操作數(shù)據(jù)庫中的表教學重、難點重點:定義接口和實現(xiàn)接口的方法難點:實現(xiàn)數(shù)據(jù)表接口的方法教學材料或用具教材、教案、課件、課程標準、案例素材及Eclipse開發(fā)軟件課后任務(wù)1.利用抽象類分別求三角形、矩形和圓的面積、周長。2.鞏固例子山東理工職業(yè)學院單元教學過程設(shè)計步驟及時間教學內(nèi)容教師活動學生活動5分鐘5分鐘20分鐘40分鐘50分鐘20分鐘50分鐘60分鐘10分鐘【組織教學】1、檢查學生出勤,作好學生考勤記錄。2、課堂提問,了解學生掌握所學知識情況。3、強調(diào)課堂紀律,加強互動,活躍課堂氣氛。【課題導(dǎo)入】任務(wù)1.1用記事本完成了代碼設(shè)計,但是還無法看到代碼執(zhí)行后的效果。任務(wù)二是在任務(wù)一的基礎(chǔ)上,利用Java語言的開發(fā)工具運行該程序,并得到運行結(jié)果。在此過程中,需要了解開發(fā)工具的使用方法、文件建立的方法、代碼的編寫、存儲,以及程序的運行過程?!局v授新課】8.4.1抽象類和接口1.抽象類抽象類是普通類與接口之間的一種中庸之道。Java規(guī)定,用關(guān)鍵字abstract修飾的類稱為抽象類(abstract類),用關(guān)鍵字abstract修飾的方法稱為抽象方法。例如:abstractclassBase{//抽象類定義abstractvoidmethod1();//抽象方法定義voidmethod2(){//具體方法定義System.out.println("method2");}}聲明格式:abstractclass類名{abstract數(shù)據(jù)類型方法名(參數(shù)表);}【注意】(1)方法聲明中沒有{};(2)方法聲明最后的“;”不能省略?!菊f明】(1)用abstract修飾的類表示抽象類,抽象類不能被實例化,即不允許創(chuàng)建抽象類本身的實例。沒有用abstract修飾的類稱為具體類,具體類可以被實例化。(2)用abstract修飾的方法表示抽象方法,抽象方法沒有方法體。抽象方法用來描述系統(tǒng)具有什么功能,但不提供具體的實現(xiàn)。沒有用abstract修飾的方法稱為具體方法,具體方法具有方法體。(3)抽象方法必須聲明在抽象類中,而且抽象方法只需聲明,不需實現(xiàn)。(4)父類中的某些抽象方法不包含任何邏輯,需要在子類繼承中由子類提供抽象方法的實現(xiàn)細節(jié)。(5)含有抽象方法的類必須聲明為抽象類(abstract類)。抽象類中不一定包含抽象方法,但包含抽象方法的類一定要聲明為抽象類。(6)抽象類中可以包含構(gòu)造方法,由于不能利用抽象類直接創(chuàng)建對象,因此抽象類中定義構(gòu)造方法是多余的?!纠?.1】找出下面程序中的錯誤,并說明原因。abstractclassBase{abstractvoidmethod1();abstractvoidmethod2();}classSubextendsBase{voidmethod1(){System.out.println("method1");}}2.接口接口(interface)就是方法和常量的集合,為了使Java程序的類層次結(jié)構(gòu)更加合理,更符合實際問題的本質(zhì),編譯者可以把用于完成特定功能的若干屬性組織成相對獨立的屬性集合;凡是需要實現(xiàn)這種特定功能的類,都可以繼承這個屬性集合并在類內(nèi)使用它,這種屬性集合就是接口。【說明】接口使抽象的概念更向前邁進了一步,接口產(chǎn)生一個完全的抽象類,它根本就沒有提供任何具體實現(xiàn)。允許創(chuàng)建者確定方法名、參數(shù)列表和返回類型,但是沒有任何方法體。接口只提供形式,不提供任何具體實現(xiàn)。接口定義格式:[public]interface接口名{[public][static][final]類型變量名=常量值;[public][abstract]類型方法名(參數(shù)列表);}說明:接口修飾符為public或省略形式,分別為公共接口,或者是友好接口;而屬性和方法均為public權(quán)限。接口體由兩部分組成:(1)對接口中屬性的聲明接口中只能包含public、static、final類型的成員變量,因此接口中的屬性都是用final修飾的常量。對接口中方法的聲明接口中只能包含public、abstract類型的成員方法,不能有非抽象方法。在接口中只能給出這些抽象方法的方法名、返回值和參數(shù)列表,而不能定義方法體,即僅僅規(guī)定了一組信息交換、傳輸和處理的“接口”?!纠?.2】接口定義舉例publicinterfaceA{publicstaticfinalintX=1;publicstaticfinalintY=2;publicstaticfinalintZ=3;publicvoidshow();}【例8.3】找出下面程序中的錯誤,并說明原因。publicinterfaceA{intvar;voidmethod1(){System.out.println("method1");}protectedvoidmethod2();staticvoidmethod3(){System.out.println("method3");}}3.接口的實現(xiàn)接口的實現(xiàn):接口由類來實現(xiàn),而且一個類能實現(xiàn)許多接口。實現(xiàn)的格式如下:class類名implements接口1[,接口2,接口3,…,接口n]{......}例如:假設(shè)A,B,C為已經(jīng)定義的接口publicclassMyInterfaceimplementsA,B,C{......}【說明】類MyInterface實現(xiàn)了三個接口,即實現(xiàn)三者所有方法?!纠?.4】實現(xiàn)SayHello接口interfaceSayHello{voidprintMessage();}classMySayHelloimplementsSayHello{publicvoidprintMessage(){System.out.println("Hello");}}【例8.5】找出下面程序中的錯誤,說明原因,并進行改正。interfaceSayHello{voidprintMessage();voidreceiveMessage();}classMySayHelloimplementsSayHello{publicvoidprintMessage(){System.out.println("Hello");}}【注意】(1)接口一經(jīng)聲明并實現(xiàn),即可以使用。(2)同一個接口可以由多個類來實現(xiàn),接口中的同一個方法在實現(xiàn)這個接口的不同的類中可以有不同的具體實現(xiàn)(多態(tài)性)。(3)接口是一個規(guī)范,是一個抽象的概念,由類把這個規(guī)范具體實現(xiàn)。4.類和接口的區(qū)別(1)類只能繼承一個類,而對于接口,類可以實現(xiàn)多個接口。(2)對于繼承性,類繼承了超類的方法:子類可以選擇是否覆蓋超類的方法。接口的方法沒有實現(xiàn),因此,類必須實現(xiàn)接口中的每個方法。(3)從本質(zhì)上講,接口是一種特殊的抽象類,這種抽象類中只包含常量和方法的定義,而沒有變量和方法的實現(xiàn)。(4)接口像一個規(guī)范,一個協(xié)議,而類則是實現(xiàn)了這個協(xié)議,滿足這個規(guī)范的具體實現(xiàn)。5.接口和抽象類的區(qū)別相同點:(1)都包含抽象方法,聲明多個類共享方法首部。(2)都不能被實例化。不同點:(1)一個類只能繼承一個抽象類,而一個類可以實現(xiàn)多個接口。(2)訪問權(quán)限不同,抽象類和普通類一樣,而接口的訪問權(quán)限是默認和public,接口成員都是public。(3)抽象類和接口中的成員變量不同。(4)抽象類可包含抽象方法和普通方法,接口只能是抽象方法。6.接口的作用(1)使用接口可以使設(shè)計與實現(xiàn)相分離,使使用接口的用戶程序不受不同接口實現(xiàn)的影響,不受接口實現(xiàn)改變的影響。(2)彌補Java只支持類單繼承的不足,它用來完成多繼承的一些功能。Java接口反映了對象較高層次的抽象,為描述相互似乎沒有關(guān)系的對象的共性提供了一種有效的手段。7.接口的繼承接口之間可以存在繼承關(guān)系,但不能是實現(xiàn)關(guān)系。interfaceA{voidmethod1();}interfaceB{voidmethod2();}interfaceDextendsA,B{}//合法interfaceEimplementsA,B{}//錯誤 【例8.6】//定義接口interfaceAnimal{voideat();voidsleep();}interfaceManextendsAnimal{voidthink();}interfaceSchool{voidclassroom();}//定義抽象類StudentabstractclassStudentimplementsMan,School{publicabstractvoidstudy();}//定義大學生類classUndergraduateextendsStudent{Stringname;publicUndergraduate(Stringname){=name;}publicvoidstudy(){System.out.println(name+"canstudy.");}publicvoidclassroom(){System.out.println(name+"hasclassroomtostudy.");}publicvoidthink(){System.out.println(name+"canthink.");}publicvoideat(){System.out.println(name+"caneat.");}publicvoidsleep(){System.out.println(name+"cansleep.");}voidablity(){this.sleep();this.eat();this.think();this.study();this.classroom();}}//定義測試類publicclassExp86{publicstaticvoidmain(Stringargs[]){Undergraduates=newUndergraduate("李平");s.ablity();}}運行結(jié)果:圖8-4例8.4運行效果圖8.接口的多態(tài)多態(tài):同一個接口可以由多個類來實現(xiàn),接口中的同一個方法在實現(xiàn)這個接口的不同的類中可以有不同的具體實現(xiàn)?!纠?.7】publicinterfaceA{ publicstaticfinalintX=1; publicstaticfinalintY=2; publicstaticfinalintZ=3; publicvoidshow();}classBimplementsA{ publicvoidshow(){ System.out.println("classB"); }}classCimplementsA{ publicvoidshow(){ System.out.println("classC"); }}8.4.2List與ArrayListList包括List接口以及List接口的所有實現(xiàn)類。因為List接口實現(xiàn)了Collection接口,所以List接口擁有Collection接口提供的所有常用方法,又因為List是列表類型,所以List接口還提供了一些適合于自身的常用方法,如表8-1所示。表8-1List接口相關(guān)方法方法名稱功能簡介add(intindex,Objectobj)用來向集合的指定索引位置添加對象,其他對象的索引位置相對后移一位,索引位置從0開始。addAll(int,Collectioncol)用來向集合的指定索引位置添加指定集合中的對象。remove(intindex)用來清除集合中指定索引位置的對象set(intindex,Objectobj)用來將集合中指定索引位置的對象修改為指定對象get(intindex)用來獲得指定索引位置的對象indexOf(Objectobj)用來獲得指定對象的索引位置。當存在多個時,返回一個索引位置;當不存在時,返回-1lastIndexOf(Objectobj)用來獲得指定對象的索引位置。當存在多個時,返回最后一個的索引位置;當不存在時,返回-12.實例化接口List接口提供的適合于自身的常用方法均與索引有關(guān),這是因為List集合為列表類型,以線性方式存儲對象,可以通過對象的索引操作對象。

List接口的常用實現(xiàn)類有ArrayList和LinkedList,在使用List集合時,通常情況下聲明為List類型,實例化時根據(jù)實際情況的需要,實例化為ArrayList或LinkedList。格式://

利用ArrayList類實例化List集合

List<數(shù)據(jù)類型A>對象名稱=newArrayList<數(shù)據(jù)類型A>();//

利用LinkedList類實例化List集合List<數(shù)據(jù)類型B>對象名稱=newLinkedList<數(shù)據(jù)類型B>();add(intindex,Objectobj)方法和set(intindex,Objectobj)方法的區(qū)別

在使用List集合時需要注意區(qū)分add(intindex,Objectobj)方法和set(intindex,Objectobj)方法,前者是向指定索引位置添加對象,而后者是修改指定索引位置的對象?!纠?.8】遍歷List舉例1importjava.util.Iterator;importjava.util.LinkedList;importjava.util.List;publicclassExp88{ publicstaticvoidmain(String[]args){ Stringa="A",b="B",c="C",d="D",e="E"; List<String>list=newLinkedList<String>(); list.add(a); list.add(e); list.add(d); list.set(1,b);//將索引位置為1的對象e修改為對象b list.add(2,c);//將對象c添加到索引位置為2的位置 Iterator<String>it=list.iterator(); while(it.hasNext()){ System.out.println(it.next()); } }}運行結(jié)果:ABCD因為List集合可以通過索引位置訪問對象,所以還可以通過for循環(huán)遍歷List集合,例如遍歷上面代碼中的List集合的代碼如下:【例8.9】遍歷List舉例2

importjava.util.ArrayList;importjava.util.LinkedList;importjava.util.Iterator;importjava.util.List;publicclassExp89{ publicstaticvoidmain(String[]args){ System.out.println("開始:"); Stringa="A",b="B",c="C",d="D",e="E"; List<String>list=newLinkedList<String>(); list.add(a); list.add(e); list.add(d); list.set(1,b);//將索引位置為1的對象e修改為對象b list.add(2,c);//將對象c添加到索引位置為2的位置 Iterator<String>it=list.iterator(); while(it.hasNext()){ System.out.println(it.next()); } for(inti=0;i<list.size();i++){//利用get(intindex)方法獲得指定索引位置的對象 System.out.println(list.get(i)); } System.out.println("結(jié)束!"); }}運行結(jié)果:開始:ABCDABCD結(jié)束!【知識拓展】1.Java的forEach用法JavaSE5引入了一種更加簡潔的for語法格式,可以用于遍歷數(shù)組和集合,是for循環(huán)的增強版本。foreach雖然對for循環(huán)進行了簡化,但是并不是說foreach就比for更好用,foreach適用于循環(huán)次數(shù)未知,或者計算循環(huán)次數(shù)比較麻煩的情況。但是更為復(fù)雜的一些循環(huán)還是需要用到for循環(huán)。這里需要注意一點:forEach只能取值,不能賦值。forEach格式如下:for(元素類型元素變量x:遍歷對象(數(shù)組或集合)){引用元素變量x的語句;}【例8.10】遍歷數(shù)組示例importjava.util.*;publicclassfe{ publicstaticvoidmain(String[]args){ int[]a={11,22,33,44,55,66}; for(intx:a){ System.out.println(x); } }}圖8-6forEach實例運行結(jié)果2.Java迭代器迭代器是一種模式,可以使得序列類型的數(shù)據(jù)結(jié)構(gòu)的遍歷行為與被遍歷的對象分離,即我們無需關(guān)心該序列的底層結(jié)構(gòu)是什么樣子的。只要拿到這個對象,使用迭代器就可以遍歷這個對象的內(nèi)部。不同java集合的內(nèi)部結(jié)構(gòu)是不一樣的,如果為每種容器都單獨實現(xiàn)一種遍歷方法十分麻煩,為了簡化遍歷容器的操作,所以推出了java迭代器(Iterator)。Iterator接口包含三個方法:hasNext(),next(),remove()。hasNext():每次next之前,先調(diào)用此方法探測是否迭代到終點。next():返回當前迭代元素,同時,迭代游標后移。remove():刪除最近一次已經(jīng)迭代出去的那個元素。【注意】只有當next()執(zhí)行完后,才能調(diào)用remove()函數(shù)。比如你要刪除第一個元素,不能直接調(diào)用remove(),而要先next()一下;如果沒有先調(diào)用next()就調(diào)用remove()方法是會拋出異常的?!纠?.11】迭代示例importjava.util.ArrayList;importjava.util.Iterator;publicclassdiedai{ publicstaticvoidmain(String[]args){ ArrayList<String>list=newArrayList<String>(); list.add("中國加油"); list.add("武漢加油"); list.add("大家都要好好的"); for(Iterator<String>iterator=list.iterator();iterator.hasNext();){ System.out.println(iterator.next()); } }}圖8-7迭代示例運行結(jié)果【技能訓(xùn)練】任務(wù)分析操作步驟如下:步驟一:創(chuàng)建學生成績表操作接口;步驟二:實現(xiàn)學生成績表操作接口。二、任務(wù)實施步驟一:創(chuàng)建學生成績表操作接口;1.在com.sdlg.dao包中右單擊,然后從彈出的菜單中選擇“new”,接著選擇“interface”,新建接口StuGradeDao,如下圖所示:圖8-1新建StuGradeDao界面【注意】創(chuàng)建接口格式publicinterface接口名{}2.在接口中定義針對學生成績表操作的各個方法。packagecom.sdlg.dao;importjava.util.List;importcom.sdlg.entity.Stu;publicinterfaceStuGradeDao{ booleanadd(Stustu);//添加記錄 booleanupdate(Stustu);//修改記錄 booleandelete(Stringsno);//刪除記錄 List<Stu>queryAll();//查找全部記錄}步驟二:實現(xiàn)學生成績表操作接口。1.在com.sdlg.dao.impl包上右單擊,選擇“new”,選擇“class”,新建類StuGradeDaoImpl類,如下所示:importcom.sdlg.dao.StuGradeDao;publicclassStuGradeDaoImplimplementsStuGradeDao{}【注意】implementsStuGradeDao為實現(xiàn)該接口。2.實現(xiàn)該接口,當未實現(xiàn)接口中定義的每一個方法時,將提示錯誤,如下圖所示:圖8-2錯誤提示【注意】這里的實現(xiàn)在于實現(xiàn)該接口中定義的每一個方法,哪怕有一個方法沒有被實現(xiàn),也會提示錯誤,其次,可以通過把該類定義為抽象類來解決問題,使錯誤消失。這里,我們要求實現(xiàn)每一個接口中定義的方法。3.在左側(cè)的錯誤符號上單擊,從彈出的提示中,選擇“Addunimplementedmethods”,如下圖所示:圖8-3通過錯誤提示添加未實現(xiàn)方法4.實現(xiàn)各方法后的代碼如下所示:importjava.util.List;importcom.sdlg.dao.StuGradeDao;importcom.sdlg.entity.Stu;publicclassStuGradeDaoImplimplementsStuGradeDao{ @Override publicbooleanadd(Stustu){ //TODOAuto-generatedmethodstub returnfalse; } @Override publicbooleanupdate(Stustu){ //TODOAuto-generatedmethodstub returnfalse; } @Override publicbooleandelete(Stringsno){ //TODOAuto-generatedmethodstub returnfalse; } @Override publicList<Stu>queryAll(){ //TODOAuto-generatedmethodstub returnnull; }}【注意】從語法的角度來講,只要給各方法加上{},即方法體,則可理解為實現(xiàn),語法上可以通過。但是,要實現(xiàn)其功能,我們還需要在方法體中添加各功能代碼。5.實現(xiàn)各方法的功能packagecom.sdlg.dao.impl;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.util.ArrayList;importjava.util.List;importcom.sdlg.dao.StuGradeDao;importcom.sdlg.entity.Stu;importcom.sdlg.util.DBConnection;publicclassStuGradeDaoImplimplementsStuGradeDao{ DBConnectioncon=newDBConnection(); @Override publicbooleanadd(Stustu){ //建立插入sql語句 Stringsql="insertintostudent(sno,sname,classname,sqlkc,java,web,gym)values(?,?,?,?,?,?,?)"; intresult=con.update(sql,stu.getSno(),stu.getName(),stu.getClassname(),stu.getSql(),stu.getJava(),stu.getWebdesign(),stu.getGym()); if(result>0){ returntrue; }else{ returnfalse; } } @Override publicbooleanupdate(Stustu){ //建立更新sql語句 Stringsql="updatestudentsetsname=?,classname=?,sqlkc=?,java=?,web=?,gym=?wheresno=?"; intresult=con.update(sql,stu.getName(),stu.getClassname(),stu.getSql(),stu.getJava(),stu.ge

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論