<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; }
這樣就能夠在程序中使用這個方法完成存錢和取錢的操做。
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值的數組。因此,沒有數組能夠同時存儲雙精度數和字符串。
代碼行數(新增/累積) | 博客量(新增/累積) | 學習時間(新增/累積) | 重要成長 | |
---|---|---|---|---|
目標 | 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 | 關於繼承有必定認識 |