20172302 《程序設計與數據結構》第七週學習總結

<hr/> 2018年學習總結博客總目錄:[第一週](http://www.cnblogs.com/hzy0628/p/8539037.html) [第二週](http://www.cnblogs.com/hzy0628/p/8584976.html) [第三週](http://www.cnblogs.com/hzy0628/p/8642935.html) [第四周](http://www.cnblogs.com/hzy0628/p/8671888.html) [第五週](http://www.cnblogs.com/hzy0628/p/8746606.html) [第六週](http://www.cnblogs.com/hzy0628/p/8830819.html) [第七週](http://www.cnblogs.com/hzy0628/p/8870071.html) <hr/>html

教材學習內容總結

1.建立子類:用於派生新類的原始類稱做父類、超類或基類,被派生出的類稱爲子類或亞類。Java中用保留字extends來指明新類由已有類派生而得。繼承的過程是在兩個類之間創建一種「是」的關係,即子類是一種更具體的父類版本。這是一個繼承的表述:public class Dictionary extends Book,說明的是Dictionary類是由Book類派生而得來的。java

2.繼承具備單向性,父類不能引用子類內部聲明的變量和方法。git

3.protected修飾符:咱們以前已經學過public和private兩種可見性修飾符,下面介紹protected修飾符。可見性修飾符用於控制對類成員的訪問,這種控制也延伸到繼承過程當中。父類的公有方法或變量子類但是訪問調用,而私有方法或變量則不能。因而引入protected修飾符,父類中方法或變量聲明爲protected可見性時,子類能夠引用它,同時也可被一個包內其餘類所引用。程序員

4.繼承過程當中構造函數並不會被繼承,這時咱們可使用一個保留字super引用父類,super的用處之一是能夠調用父類的構造方法。super用法注意:用super引用調用父類構造方法的操做只能在子類中執行,而且必須是第一行,若是沒有這樣的調用,Java會自動在構造方法開始處產生一行super(),以確保父類構造方法初始化本身變量。下面是一個舉例:編程

public Dictionary2(int numpages, int numDefinitions)
    {
        super(numpages);
        definitions = numDefinitions;
    }

5.多繼承:多繼承有時效果會很好,但存在一些問題,如兩個父類中有重名方法時應該怎麼處理?因此呢,Java語言明確代表不支持多繼承,但Java中支持實現多接口,能夠完成類交互。數組

6.(1)重寫方法:子類和父類具備相同方法名和簽名時,子類方法將重寫父類方法,子類方法優先。但子類不能重寫父類中的final方法。(2)影子變量:子類中與父類具備相同的變量,子類中聲明的同名變量被稱做影子變量(shadow variable),原則上咱們要避免使用影子變量,因其容易形成混淆。數據結構

7.類層次結構:同一個父類派生出的多個子類,稱爲同胞。一個類的子類還能夠稱爲一個或多個其餘類的父類,由此創建起類層次結構。函數

8.Java中,全部類歸根結底都是由Object類派生而來的,Object類是Java繼承樹的根節點。若是一個類沒有extends子句顯式派生,則自動從Object類派生。一個類中定義toString方法時,其實是重寫了Object類中的toString方法,從而實現返回本身保存的字符串。oop

9.抽象類:抽象類能夠包含抽象方法,,也能夠聲明數據。在類定義聲明頭中,可用abstract修飾符將一個類聲明爲抽象類,包含抽象方法的類必須聲明爲抽象類,抽象方法必須用abstract修飾符,但抽象類不必定包含抽象方法。學習

10.對於一個抽象方法不該該使用final或static修飾符修飾,由於子類不能重寫final方法,一次沒法爲抽象final方法提供定義。static方法能夠由類名進行調用,而沒必要實例化對象類調用,因爲抽象方法沒喲實現代碼,抽象static方法沒有意義。

11.同時接口也能夠進行派生,同類的繼承類似,但不存在(protected 和private成員)可見性問題,由於一個接口的全部成員都是公共的。要注意類不能用於派生接口。

12.父類中的私有成員也被子類繼承,只是不能以成員名進行訪問,可是能夠經過某個公共的方法進行間接的訪問,如書上的【例9.十、9.十一、9.12】,這裏再也不列舉。

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

  • 問題1:關於書上所說的super的使用方法,書上值提到一種,且說它相似於this引用,咱們學過this引用是用於引用當前正在運行的對象,那麼二者到底有什麼區別,同時super還能夠用來作什麼?

  • 問題1解決方案:從博客園的一篇博客中找到了我想要的一個答案,見下圖:

他這篇博客還較完整的解釋這些關係。讓我比較清楚的瞭解到super的用法及與this的區別。同時我從書上的一道例題中又看到了super的一種用法:調用子類中重寫方法的父類版本。

  • 問題2:SR9.9的b小題:子類能夠重寫父類中的構造方法。錯誤。 關於這個錯誤的緣由我不明白,我選的也是正確。

  • 問題2解決方案:經過查答案,找到了解釋:由於構造方法是一種特殊的方法,與類名相同,但沒有返回類型,若是試圖重寫父類的構造方法,將產生語法錯誤。仍是不太明白,這個答案在解釋什麼...,從網上找了一些,看完這個理解一些,就是默認就會去調用父類無參構造,沒有被重寫的可能。

子類不能重寫父類的構造函數,子類在構造函數中就會首先去調用父類的構造,默認調用的是父類的無參構造。若是你須要參數個數不一樣的構造,能夠在父類中寫多個構造方法的。子類繼承父類的方法中不包含構造方法。

  • 後補:上課結合藍墨雲課件,以及老師所講,對這裏有了更深的一些認識,見下圖:

  • 問題3:SR9.22中,爲何子類必需要重寫其父類的中的toString方法,即使是在當前的程序中該方法並無被子類所調用?

  • 問題3解決方案:之前也是遇到過沒有重寫的話,會產生的是對象的地址,那這裏沒有使用或繼承子類時也要重寫真的是由於答案所說:以免後面出現問題,由於之後可能有人在直接使用該子類時或繼承該子類時,會認爲該子類已經存在一個有效的toString方法。

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

  • 問題1:本章中學習代碼調試中並無遇到太大問題,編程項目也是完成比較順利一些,一開始有些問題的就是PP9.3的題意,它給出的要求是設計並實現一組類。

  • 問題1解決方案:想了以後的感受是應該先編寫一個父類,而後再去由這一個父類派生出這一組類,這應該是題目的意思,可是這個toString方法究竟是在父類中編寫還寫子類中編寫,這個搞不清楚,又看了半天題目,多是題目中要求的是每一個子類還要有其餘屬性,若是在父類中重寫了toString方法,在子類中還要重寫,就沒有在父類中重寫這個toString方法。下面是寫出的那個父類。

public class Readings
{
    protected int pages;
    protected String antisop;

    public Readings(int pages,String antisop)
    {
        this.pages = pages;
        this.antisop = antisop;
    }

    public void setPages(int numpages)
    {
        pages = numpages;
    }
    public void setAntisop(String antisop)
    {
        this.antisop = antisop;
    }

    public int getPages(int numpages)
    {
        pages = numpages;
        return pages;
    }
    public String getAntisop(String antisop)
    {
        this.antisop = antisop;
        return  antisop;
    }

}
  • 問題2:這周完成了上週並不會作的項目8.6,在這個項目的編寫中也遇到些問題,上週博客沒有補充,在這裏寫一下,這裏呢,首先是那個基礎的Account類,而後就是一個Tranctions類,在這個類中定義了一個數組,而後是實現這個transactions類的程序,可是在這個程序中咱們建立了一個transactions對象,Transactions accts = new Transactions();,可是這個對象已經不能再使用Account類中存錢取錢操做,這個怎麼解決?

  • 問題2解決方案:這個想了很久,也是一直卡着,最後是看了一下別的同窗的碼雲代碼,就是在transactions類中咱們能夠新定義方法完成存錢和取錢的操做,見以下的代碼:

public double acctdeposit(int number,double amount)
      {
          double acctbalance = acct[number].deposit(amount);
          return  acctbalance;
      }
      public double acctwithdraw(int number,double amount,double fee)
      {
          double acctbanlance = acct[number].withdraw(amount,fee);
          return acctbanlance;
      }

這樣就能夠在程序中使用這個方法完成存錢和取錢的操做。

代碼託管

  • 本週是打算用IDEA進行統計代碼的,但在IDEA 中統計結果與虛擬機上差距較大,這周先以虛擬機中代碼行數爲準,下週會刪掉一些以前項目,之後使用IDEA進行統計。

上週考試錯題總結

  • 1.In Java, arrays are A . primitive data types <font color=#0000CD >B . objects</font> 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

  • 解析:在Java中,數組被做爲對象來實現。該變量是儲存整個數組的內存塊的參考變量。然而,使用符號名稱索引而不是經過消息傳遞來訪問數組。

  • 2.The "off-by-one" error associated with arrays arises because <font color=#0000CD >A . the first array index is 0 and programmers may start at index 1, or may use a loop that goes one index too far</font> B . the last array index is at length + 1 and loops may only iterate to length, missing one C . the last array element ends at length - 1 and loops may go one too far D . programmers write a loop that goes from 0 to length - 1 whereas the array actually goes from 1 to length E . none of the above, the "off-by-one" error has nothing to do with arrays

  • 解析:數組被初始化爲int [] array = new int [a],其中a是數組的大小。但這個數組的索引值爲0到a - 1,有時程序員會編寫代碼來嘗試訪問索引1到a。這就致使了差一錯誤。

  • 3.If an int array is passed as a parameter to a method, which of the following would adequately define the parameter list for the method header? A . (int[ ]) B . (int a[ ]) <font color=#0000CD >C . (int[ ] a)</font> D . (int a) E . (a[ ])

  • 解析:這道題被誤導了,誤覺得數組做爲參數傳遞與定義一個數組不一樣,但其實是一致的,參數被定義爲變量最初聲明爲類型參數名稱。這裏,類型是int,參數是a。

  • 4.If a and b are both int arrays, then a = b; will <font color=#0000CD >A . create an alias</font> 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都引用同一個數組,因此他們如今爲彼此的別名。

  • 5.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. <font color=#0000CD >A . true</font> B . false

  • 解析:main方法須要參數,以防程序員但願容許用戶提供命令行參數。在Java命令以後,在命令行輸入的任何東西都將被接受爲命令行參數。若是是由空格分隔的幾個單詞,那麼每一個單詞都存儲爲一個單獨的字符串數組元素。例如,「java foo,這裏的類hi「會在變量0中存儲」hi「在變量1中」,以供程序使用。

  • 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. <font color=#0000CD >A . true</font> B . false

  • 解析:數組被稱爲同構類型。這意味着存儲在陣列中的值的類型必須對每一個元素都是相同的。類型由聲明決定。因此,int x只讓x成爲int值的數組。因此,沒有數組能夠同時存儲雙精度數和字符串。

結對及互評

點評過的同窗博客和代碼

  • 本週結對學習狀況
    • 20172308

    • 博客中值得學習的或問題:上週提出博客排版的問題後立刻作出了改觀,同時這周的博客內容也是比較充實,問題中有些也問過我,我也不是很明白,看他的博客也對那些問題有了一個理解,而且博客交的也是比較早。

    • 結對學習內容 共同窗習了第九章的學習內容,而且就他的博客中問題2進行討論過,無果,可是自己的話本身沒有那麼想。

    • 上週博客互評狀況

    • 20172308

其餘(感悟、思考等)

感悟

  • 這周對繼承關係有了必定的認識,但本週在第九章學習的時長是比較短一些,多是內容比較少的緣由。這周的重心是放在了實驗項目上,在那上面多花了功夫。整體來講在Java上這周花的時間可能稍微少了一些,實驗項目有的作着很吃力,作不下去,有些學不進去。下週但願能多投入一點!

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第一週 157/157 1/1 15/15
第二週 382/539 1/2 16/31
第三週 317/856 2/4 15/46
第四周 996/1852 1/5 24/70
第五週 578/2330 1/6 16/86 這周對上週第七章的學習有了更深的理解
第六週 475/2805 1/7 14/100 學習了數組方面的相關知識
第七週 629/3434 1/8 14/114 關於繼承有必定認識

參考資料

相關文章
相關標籤/搜索