20172329 2017-2018-2 《程序設計與數據結構》第七週學習總結

20172329 2017-2018-2 《程序設計與數據結構》第七週學習總結

教材學習內容總結

第九章 繼承
1、建立子類
一、繼承:它是從現有類派生出新類的過程,而且是一種強有力的軟件開發技術,他是面向對象的編程的顯著特徵。
二、經過繼承,新類自動包含了原始類的變量和方法,而後程序員能夠將新變量和方法添加到派生的新類,或者修改所繼承的方法和變量。
三、特色:經過繼承建立新類比從新鞋類更快捷、更容易且成本更低。繼承是支持軟件複用的途徑之一。
四、用於派生類的成爲父類、超類或基類,被派生出的類稱爲子類或亞類。Java用保留字extends指明新類有現有類派生。
五、protected修飾符:當一個變量或方法聲明爲protected可見性時,子類就能夠引用它,而且父類保持了必定的封裝性。
六、super引用:在一個類中可使用保留字super引用父類,即便用super引用能夠訪問父類的成員;構造方法的第一行應該用super引用調用父類構造方法。
七、多繼承:Java的繼承方法叫作單繼承,即子類只能有惟一的父類。php

2、重寫方法
一、當子類和父類有相同方法名和簽名,子類方法將重寫父類方法,子類方法優先。
二、類層次結構:從一個父類派生出的子類,還能夠是它本身的子類,而且能夠多個子類能夠從一個父類派生。
三、抽象類:抽象類在類層次結構中充當佔位符,注:對一個抽象方法使用final或static修飾符將產生矛盾。html

教材學習中的問題和解決過程

  • 問題1:書中講到

通常而言,繼承更加快捷。java

可是有沒有特別的時候呢?git

  • 問題1解決方案:在查找資料後,發現了這樣一篇文章,說在Java裏繼承是有害的,

Jams Gosling(Java之父)作發起人講話的時候在被問到:「若是你從新構造Java,你想改變什麼?」的時候,說到:「我想拋棄classes」,他這樣解釋:「真正的問題不是因爲class自己,而是實現繼承(extends 關係)。接口繼承(implements關係)是更好的。你應該儘量的避免實現繼承。」程序員

  • 問題2:軟件複用是什麼?web

  • 問題2解決方案:軟件複用是使用現有軟件組件實現或更新軟件系統的過程。
    它能夠下降成本和開發時間,產生可靠的軟件實現標準化,在不一樣應用中保持一致 。編程

  • 問題3:抽象類與接口的區別?數組

  • 問題3解決方案:
    書中講:數據結構

在抽象類中,每個抽象方法都必須使用abstract修飾符,但抽象類沒必要必定包含抽象方法。學習

注:有抽象類派生的子類必須重寫全部父類的抽象方法,不然該子類仍然是抽象類。
抽象類是用來捕捉子類的通用特性的 。它不能被實例化,只能被用做子類的超類。抽象類是被用來建立繼承層級裏子類的模板。接口是抽象方法的集合。若是一個類實現了某個接口,那麼它就繼承了這個接口的抽象方法。這就像契約模式,若是實現了這個接口,那麼就必須確保使用這些方法。接口只是一種形式,接口自身不能作任何事情。

代碼調試中的問題和解決過程

  • 問題1:一開始不知道super怎麼用,老是調用不對對象或者是方法。

  • 問題1解決方案:發現我將繼承和super調用弄混了,繼承能夠直接使用父類變量或者方法,我還在那裏使勁用super調用。

  • 問題2:爲何抽象類被子類繼承之後,在驅動中輸入System.out.println(....)調用方法顯示出錯?

可是當我直接提取方法的時候就能夠:

  • 問題2解決方案:
    因而先是問同窗,他們說是書上這樣寫的,也不知道爲何,
    後來我發現,在子類中,輸出的語句自己就是經過 System.out.println(....)定義的,因此我以爲在System.out.println()語句中不能再生成一個System.out.println();只能這樣理解了,由於其餘也說不清啊

代碼託管

上週考試錯題總結

  • 錯題1
    In Java, arrays are
    A. primitive data types
    B. objects
    C. interfaces
    D. primitive data types if the type stored in the array is a primitive data type and objects if the type stored in the array is an object
    E. Strings

    正確答案: B 個人答案: D

解析:在Java中,數組是做爲對象實現的。該變量是存儲整個數組的內存塊的引用變量。可是,使用記號名稱[index]而不是消息傳遞來訪問數組。

緣由:由於數組的運用和原始數據類型比較像,並且定義的時候也用到了,因此沒有分清。

  • 錯題2
    Given the following declarations, which of the following variables are arrays?
    int [ ] a, b;
    int c, d [ ];
    A. a
    B. a and b
    C. a and d
    D. a, b and d
    E. a, b, c and d

    正確答案: D 個人答案: C

解析:第一個聲明聲明a和b都是int數組。第二個聲明聲明c和d是整數,可是在d的狀況下是一個int數組。因此,a,b和d都是int數組。

緣由:數組的定義,我本人爲用逗號分開就表明已經分爲定義兩個部分,感受本身傻,好傻

  • 錯題3
    If a and b are both int arrays, then a = b; will
    A. create an alias
    B. copy all elements of b into a
    C. copy the 0th element of b into the 0th element of a
    D. return true if each corresponding element of b is equal to each corresponding element of a (that is, a [0] is equal to b [0], a [1] is equal to b [1] and so forth) and return false otherwise
    E. return true if a and b are aliases and return false otherwise

    正確答案: A 個人答案: B

解析:「=」是一個賦值運算符。若是這兩個變量都是基元,那麼左邊的變量會獲得右邊變量的副本(因此若是a和b是int值而且b = 5,那麼a就變成5)。可是,因爲a和b是數組,因此引用變量a被設置爲引用變量b,致使a和b引用內存中的同一個數組,或者它們如今是彼此的別名。

緣由:這個當時查了資料,也作了相關的實驗,只發現告終構,沒有特別在乎別名的改變。

  • 錯題4
    A Java main method uses the parameter (String [ ] variable) so that a user can run the program and supply "command-line" parameters. Since the parameter is a String array, however, the user does not have to supply any parameters.
    A. true
    B. false

    正確答案: A 個人答案: B

解析:主要方法須要參數,以防程序員但願容許用戶提供命令行參數。而後,將在命令行輸入的任何內容做爲命令行參數接受。若是它是由空格分隔的幾個單詞,那麼每一個單詞存儲爲一個單獨的字符串數組元素。例如,「java foo.class hi there」會將變量[0]中的「hi」和變量[1]中的「there」存儲起來以供程序使用。

緣由:我認爲還要加上什麼-t呀之類的參數。

  • 錯題5
    If the following statement is performed: CD [ ] my collection = new CD [200]; where CD is a previously defined class, then my collection [5] is a CD object.
    A. true
    B. false

    正確答案: A 個人答案: B

解析:變量mycollection被聲明爲一個CD對象數組,所以mycollection [5]是數組中的第6張CD,因爲CD是一個對象,mycollection [5]是一個CD對象。

緣由:他們之間的從屬關係,沒有搞得太明白。

  • 錯題6
    In Java, an array can only store one type of data. For instance, you cannot create an array that stores both double and String values.
    A. true
    B. false

    正確答案: A 個人答案: B

解析:數組被稱爲同類型。這意味着存儲在數組中的值的類型對於每一個元素都必須是相同的。該類型由聲明決定。因此,int [] x僅使x爲int數組。因此,沒有數組能夠存儲雙打和字符串。

緣由:解析裏只是表面int型,假如就和書中例題同樣是object呢?不理解.......

  • 錯題7
    A ragged array is a multidimensional array whose initial indices don't all start at zero.
    A. true
    B. false

    正確答案: B 個人答案: A

解析:長度並不相等。Java中全部數組的初始索引必須從零開始。

緣由:書中也好像寫過能夠不從0開始,那個ragged沒有理解這個數組是個啥??

點評過的同窗博客和代碼

  • 本週結對學習狀況
  • 博客中值得學習的或問題:
    • 善於思考,勤於看書,能夠在書中摳細節,把細節問題放大,解決起來更加方便。
    • 代碼中值得學習的或問題:
    • 註釋敲的很棒,可讓別人清楚明白這裏究竟是在作什麼。
  • 基於評分標準,我給本博客打分:11分。得分狀況以下:
  1. 正確使用Markdown語法(加1分):
  2. 模板中的要素齊全(加1分)
  3. 教材學習中的問題和解決過程, 一個問題加1分
  4. 代碼調試中的問題和解決過程, 一個問題加1分
  5. 本週有效代碼超過300行(加2分)
  6. 其餘加分:
    1). 代碼Commit Message規範的加1分
    2). 感想,體會不大空的加1分
  • 本週結對學習狀況
  • 博客中值得學習的或問題:
    • 內容詳略得當;
    • 代碼調試環節比較詳細;
  • 基於評分標準,我給本博客打分:4分。得分狀況以下:
  1. 正確使用Markdown語法(加1分):
  2. 模板中的要素齊全(加1分)
  3. 教材學習中的問題和解決過程, 一個問題加1分
  4. 代碼調試中的問題和解決過程, 一個問題加1分

其餘

這一週學習內容相比於上週稍微輕一點,可是中途又添加的實驗學習,又須要咱們花費很多時間去和咱們最最親愛的Java打交道了。

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積)
目標 5000行 30篇 400小時
第一週 156/156 1/1 15/15
第二週 217/371 1/2 20/35
第三週 233/604 2/4 20/55
第四周 1382/1986 1/5 35/90
第五週 146/2196 1/6 25/115
第六週 462/2658 1/7 15/130
第七週 856/3514 1/8 20/150

參考資料

Java程序設計
藍墨雲
軟件複用的幾種方式
爲何說Java繼承是有害的
Java抽象類和接口的區別

相關文章
相關標籤/搜索