201521123113 《Java程序设计》第5周学习总结
1. 本周學(xué)習(xí)總結(jié)
1.1 嘗試使用思維導(dǎo)圖總結(jié)有關(guān)多態(tài)與接口的知識點(diǎn)。
1.2 可選:使用常規(guī)方法總結(jié)其他上課內(nèi)容。
-繼承設(shè)計(jì)的技巧
1.將公共操作和屬性放在父類 2.不要使用protected修飾屬性 3.使用繼承實(shí)現(xiàn)"is-a"關(guān)系 4.除非所有繼承的方法都有意義,否則不要使用繼承。 5.在覆蓋方法時(shí),不要改變預(yù)期的行為。 6.使用多態(tài),而非類型信息。 7.不要過多地使用反射。 8.使用abstract方法修飾可能變化的方法。接口的語法特性:1.接口不是類,不能使用new進(jìn)行實(shí)例化;2.使用instanceof運(yùn)算符;3.接口可以擴(kuò)展。
2. 書面作業(yè)
Q1.代碼閱讀:Child壓縮包內(nèi)源代碼
1.1 com.parent包中Child.java文件能否編譯通過?哪句會出現(xiàn)錯(cuò)誤?試改正該錯(cuò)誤。并分析輸出結(jié)果。
不能編譯通過。出錯(cuò)代碼是System.out.println(i);因?yàn)閕在Parent類中是private,在Parent外部不能被訪問。可以由下圖的提示,把i改成protected,這樣就能讓子類可以直接訪問父類的成員。
輸出結(jié)果分析:
1.2 另外一個(gè)包中的OutOfParentPackage.java,能否編譯通過?提示什么錯(cuò)誤?分析原因。如何更改才能使之正常編譯?(寫不出來正確答案不要緊,但請一定寫出思考過程)
- 不能通過編譯。提示下圖所示錯(cuò)誤,parent類The type Parent is not visible錯(cuò)誤,parent只能在包parent類被訪問,根據(jù)如圖的提示,可以把parent改成public class,還有parent類中的i和j是用protected修飾,也是只能在本包和所有子類內(nèi)被訪問。可以吧protected改成public,對所有類都可見,就能正常編譯了。
1.3 回答:如果為了訪問到protected修飾的屬性或方法應(yīng)該怎么辦?
可以讓OutOfParentPackage類繼承parent類,然后把parent類里的
Q2.abstract進(jìn)階:閱讀GuessGame抽象類的設(shè)計(jì)與使用源代碼
2.1 Guess改造前代碼很簡單,而改造后的代碼使用了抽象類、抽象方法看起來很復(fù)雜,那這樣的改造到底有什么好處呢?
改造前:
改造后:
package cc.openhome;public abstract class GuessGame {public void go() {int number = (int) (Math.random() * 10); int guess;do {print("輸入數(shù)字:");guess = nextInt();} while(guess != number);println("猜中了");}public abstract void print(String text);public abstract void println(String text);public abstract int nextInt(); }- 改造前未使用抽象類,只能在控制臺輸出;改造后把GuessGame改成抽象類,可以在控制臺、對話框、圖形界面等輸出。
因?yàn)橛袝r(shí)候我們不能確定別人的要求是什么,但是等要求下來再寫未免太浪費(fèi)時(shí)間,因此我們可以先寫抽象類函數(shù),等要求出來后再寫其他類繼承自此抽象類。
2.2 如果想將該游戲改造成圖形界面,應(yīng)該進(jìn)行一些什么操作?
寫一個(gè)圖形界面的類繼承GuessGame類。
2.3 結(jié)合該例子,你覺得什么時(shí)候應(yīng)該使用abstract?
當(dāng)你只知道類,不知道具體方法時(shí),要用到抽象類。上例中就是不知道要在那個(gè)平臺執(zhí)行該程序,所以就把GuessGame定義成抽象類,只有聲明沒有實(shí)例。
2.4 重要:在這個(gè)例子中,變化的是什么,不變的是什么?嘗試結(jié)合abstract、繼承等概念進(jìn)行說明。
在這個(gè)例子中,變化的是執(zhí)行平臺,不變的是GuessGame里的抽象方法。GuessGame類里的抽象方法沒有具體的定義,需要根據(jù)具體要求寫一個(gè)外部的類、方法繼承這個(gè)抽象類。
由此代碼可以看,ConsoleGame類繼承了抽象類GuessGame,對抽象類里的抽象方法重新定義,在主函數(shù)中創(chuàng)建對象game,使用了抽象類GuessGame。
Q3.Comparable與Comparator
3.1 描述Comparable接口的用途。為什么某個(gè)類實(shí)現(xiàn)了Comparable接口就可以直接使用Arrays.sort對其進(jìn)行排序?
- Comparable接口對實(shí)現(xiàn)它的每個(gè)類的對象進(jìn)行排序,實(shí)現(xiàn)此接口的對象列表和數(shù)組可以通過 Collections.sort和Arrays.sort進(jìn)行排序。
由jdk查詢Arrays.sort方法可知,實(shí)現(xiàn)Arrays.sort的前提就是要實(shí)現(xiàn)Comparable接口。
3.2 有了Comparable接口為什么還需要Comparator接口呢?
當(dāng)比較對象不支持比較或者函數(shù)不能滿足要求時(shí),就要用到Comparator接口,可以自行寫比較方法。
Q4.面向接口案例分析
4.1 畫出類關(guān)系圖,描述每個(gè)類與接口的作用。
4.2 StudenDaoListImpl與StudentDaoArrayImpl有何區(qū)別?
- StudenDaoListImpl和StudentDaoArrayImpl分別使用ArrayList和數(shù)組不同方法實(shí)現(xiàn)對StudentDao接口內(nèi)方法的操作。
Q5.什么是面向接口編程?面向接口編程的好處是什么?
結(jié)合題目3與4(Test.java的代碼)討論分析。不要百度原封不動照搬!- 代碼與接口相關(guān)聯(lián)的(比如Comparable接口),而不需要考慮具體的實(shí)現(xiàn)類。在面向?qū)ο蟮南到y(tǒng)里,不同對象方法解決不同問題。各個(gè)類有相同的方法,交互,我們面向這些交互來設(shè)計(jì)接口,就是面向接口編程。
- 好處:可以使代碼邏輯清晰,代碼易懂,方便擴(kuò)展,可維護(hù)性強(qiáng);
接口類似函數(shù),我們只要把函數(shù)寫好,不用管是誰要用,這樣做能提高效率,后面根據(jù)具體要求implements這個(gè)接口就好了。 - 題目3中的Comparable和Comparator兩個(gè)接口,可以對所有類進(jìn)行比較排序。
題目4中的StudentDao接口,test中可以用兩種方法實(shí)現(xiàn)StudentDao接口。
Q6.結(jié)對編程:面向?qū)ο笤O(shè)計(jì)(大作業(yè)2-非常重要)
內(nèi)容:使用Java代碼完成上周做的面向?qū)ο笤O(shè)計(jì)大作業(yè),需要有初步界面。實(shí)現(xiàn)的功能盡量簡單,少而精,只包含必要的功能,不要追求高大全。
寫出:類圖(盡量精簡,不用太多子類)、系統(tǒng)常用功能描述、關(guān)鍵代碼與界面
形式: 兩人依托碼云合作完成。請?jiān)谶@里貼出你們的學(xué)號、姓名與任務(wù)分工。
注意: 再過幾次課要講Java圖形界面編程,到時(shí)候要將該系統(tǒng)升級為圖形界面。系統(tǒng)的業(yè)務(wù)邏輯部分應(yīng)該變化不大,變化大的是輸入與輸出部分。所以編碼的時(shí)候,輸入(Scanner)與輸出(System.out)的代碼,請不要將其與某個(gè)業(yè)務(wù)處理函數(shù)綁死。
選做加分: 給出兩人在碼云上同一項(xiàng)目的提交記錄截圖,額外加分。注:兩個(gè)人在碼云上新建一個(gè)項(xiàng)目。
結(jié)對編程參考資料
3. 碼云上代碼提交記錄及PTA實(shí)驗(yàn)總結(jié)
題目集:jmu-Java-04-面向?qū)ο?-進(jìn)階-多態(tài)接口內(nèi)部類
3.1. 碼云代碼提交記錄
在碼云的項(xiàng)目中,依次選擇“統(tǒng)計(jì)-Commits歷史-設(shè)置時(shí)間段”, 然后搜索并截圖
3.2. PTA實(shí)驗(yàn)實(shí)驗(yàn)總結(jié)
-5-1:接觸了接口的代碼,學(xué)了Comparable接口的用法。
-5-2:
轉(zhuǎn)載于:https://www.cnblogs.com/leexd/p/6591806.html
總結(jié)
以上是生活随笔為你收集整理的201521123113 《Java程序设计》第5周学习总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 阿里云搭建git mac客户端 2个g
- 下一篇: Java实验七