- 建立子類: |
1.編寫類是定義一組相似的對象;類創建了對象的特徵和行爲,但並無爲聲明的變量預留內存空間(除非所聲明的變量是靜態的);類是一種設計,而對象是該設計的具體實現。
2.繼承就是從現有類派生出新類的過程,目的是複用現有軟件,在「子類」和「父類」之間創建一種「是」關係。
3.子類的實例化並不依賴於父類的實例化。繼承具備單項性,父類不能引用子類內部聲明的變量和方法。
4.父類的公共方法或變量能夠在子類經過名稱訪問,或者經過子類對象訪問;而父親的私有方法或變量不能在子類中訪問,或經過子類對象訪問。
5.當一個變量或方法聲明爲protected可見性時,子類就能夠引用它,而且使父類保持了必定的封裝性。
6.可見性:protected > public
封裝性:protected < private
7.構造方法不能被繼承!
8.super引用的用處之一是調用父類方法。通常狀況下,構造方法的第一行應該用super引用調用父類構造方法。若是不存在這樣的調用,則Java會自動在構造方法的開始處產生一行super()調用。這種作法能夠確保在子類構造方法執行以前,父類構造方法會先初始化本身的變量。用super引用調用父類構造方法的操做只能在子類中執行,而且必須是第一行執行。html
9.Java的繼承方法稱爲單繼承,即子類只能有惟一的父類。一些面嚮對象語言容許子類有多個父類,這種方法稱爲多繼承,對於須要兩種類描述的對象時是有用的。在Java中依賴接口提供多繼承的最好特性而不會增長歧義性。java
- 重寫方法: |
1.當子類和父類有相同的方法和簽名時,子類方法將重寫父類方法,子類方法優先。重寫的需求經常發生繼承的狀況中。
2.可用final修飾符定義一個方法,子類將不能重寫final方法。
3.子類能夠定義與父類同名的變量,應該注意從新聲明一個變量和給一個繼承變量賦值的區別。若是在一個子類中聲明一個同名變量,則該變量稱爲影子變量。
git
- 類層次結構: |
- 可見性: |
- 類間繼承關係地設計: |
1: 什麼是權限修飾符,他有什麼做用,爲何須要他;
一個Java應用有不少類,可是有些類,並不但願被其餘類使用。每一個類中都有數據成員和方法成員,可是並非每一個數據和方法,都容許在其餘類中調用。如何能作到訪問控制呢?就須要使用訪問權限修飾符。
數組
1.權限修飾符就是用於控制被修飾變量、方法、類的可見範圍.也就是其做用範圍; |
2:java中權限修飾符包括4種:
安全
1.公共類型 public ; 2.public能夠修飾類,成員變量,構造方法,方法成員。 3.被public修飾的成員,能夠在任何一個類中被調用,無論同包或不一樣包, 4.是權限最大的一個修飾符 |
1.私有類型 private; 2.能夠修飾成員變量,構造方法,成員方法,不能修飾類(此處指外部類,不考慮內部類)。 3.被private修飾的成員,只能在定義它們的類中使用,在其餘類中不能調用。 |
1.默認類型 default; 2.可用於修飾類,成員變量,構造方法,方法,都可以使用默認權限,即不寫任何關鍵字。 3.默認權限即同包權限,同包權限的元素只能在定義它們的類中,以及同包的類中被調用。 |
1.保護類型 protect; 2.能夠修飾數據成員,構造方法,方法成員,不能修飾類(此處指外部類,不考慮內部類)。 3.被protected修飾的成員,能在定義它們的類中,同包的類中被調用。 4.若是有不一樣包的類想調用它們,那麼這個類必須是定義它們的類的子類。 |
3: 關於權限修飾符還要注意幾個問題;
數據結構
1.並非每一個修飾符均可以修飾類(指外部類),只有public和default能夠。 2.全部修飾符均可以修飾數據成員,方法成員,構造方法。 3.爲了代碼安全起見,修飾符不要儘可能使用權限大的,而是適用便可。好比,數據成員,若是沒有特殊須要,儘量用private。增強封裝性; 4.修飾符修飾的是「被訪問」的權限。 |
this this是自身的一個對象,表明對象自己,能夠理解爲:指向對象自己的一個指針。 this的用法在java中大致能夠分爲3種:
|
super super能夠理解爲是指向本身超(父)類對象的一個指針,而這個超類指的是離本身最近的一個父類。 super也有三種用法:
|
super和this的異同: super(參數):調用基類中的某一個構造函數(應該爲構造函數中的第一條語句) this(參數):調用本類中另外一種造成的構造函數(應該爲構造函數中的第一條語句) super: 它引用當前對象的直接父類中的成員(用來訪問直接父類中被隱藏的父類中成員數據或函數,基類與派生類中有相同成員定義時如:super.變量名 super.成員函數據名(實參) this:它表明當前對象名(在程序中易產生二義性之處,應使用this來指明當前對象;若是函數的形參與類中的成員數據同名,這時需用this來指明成員變量名) 調用super()必須寫在子類構造方法的第一行,不然編譯不經過。每一個子類構造方法的第一條語句,都是隱含地調用super(),若是父類沒有這種形式的構造函數,那麼在編譯的時候就會報錯。 super()和this()相似,區別是,super()從子類中調用父類的構造方法,this()在同一類內調用其它方法。 super()和this()均需放在構造方法內第一行。 儘管能夠用this調用一個構造器,但卻不能調用兩個。 this和super不能同時出如今一個構造函數裏面,由於this必然會調用其它的構造函數,其它的構造函數必然也會有super語句的存在,因此在同一個構造函數裏面有相同的語句,就失去了語句的意義,編譯器也不會經過。 this()和super()都指的是對象,因此,均不能夠在static環境中使用。包括:static變量,static方法,static語句塊。 從本質上講,this是一個指向本對象的指針, 然而super是一個Java關鍵字。 |
James Gosling在1995年2月發表了一篇名爲」Java概覽」的Java白皮書,文章解釋了Java不支持多重繼承的緣由。
多線程
Java去除了一些C++中不多用、並且被常常誤解而錯用的功能,如操做符的重載(operator overloading)(儘管Java仍舊保留方法的重載),多重繼承(multiple inheritance),以及普遍的自動強迫同型(extensive automatic coercions)。 |
Java: 一種簡單的,面向對象的,分佈式的,解釋型的(譯者注:Java既不是純解釋型也不是純編譯型的語言),健壯的,安全的,架構中立的,可移植的,高性能的,支持多線程的,動態語言。 |
爲了強化簡單這個特色,這就是咱們去除多重繼承的緣由。下面來看個例子,多重繼承的菱形繼承問題。架構
有兩個類B和C繼承自A。假設B和C都繼承了A的方法而且進行了覆蓋,編寫了本身的實現。假設D經過多重繼承繼承了B和C,那麼D應該繼承B和C的重載方法,那麼它應該繼承哪一個的呢?是B的仍是C的呢?分佈式
C++中常常會掉入這個陷阱,雖然它也提出了替代的方法來解決這個問題。咱們在Java中就不會出現這個問題。就算兩個接口擁有一樣的方法,實現的類只會有一個方法,這個方法由實現的類編寫。動態的加載類會讓多重繼承的實現變得困難。ide
問題1:在作pp9.1時,遇到到了下面這個問題
問題2:在作pp9.1時,我在測試類中選擇建立一個大小爲5的數組,但我定義時,只定義了三個,因此最後運行時,沒法將sum值算出來。
問題2解決方案:前面一個問題改一下順序就能夠,後面一個問題我又設了一個變量b,把計算過程分開才能夠。
第一題: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
分析:索引值必須大於等於0而且小於數組的元素個數。若是數組中有X個元素,則索引值是0~X-1.
分析:參數被定義爲變量最初被聲明爲類型參數名稱。這裏,類型爲int[],參數爲a。
分析:第一次銀行賬戶;爲firstentity銀行保留內存空間,它自己是指向BankAccount[]對象的引用變量。第一次銀行帳戶=新銀行帳戶[1000];實例化BankAccount[]對象爲1000個BankAccount對象。
分析:第一個聲明聲明a和b都是int數組。第二個聲明聲明c和d是ints,但對於d,一個int數組。a b和d都是int數組。
分析:這樣使得兩個數組是相同的,因此a和b所引用的數組是同一個,因此一個稱爲另外一個的別名。
分析:在java命令以後,在命令行輸入的任何內容都將被接受爲命令行參數。若是是由空格分隔的幾個單詞,那麼每一個單詞都做爲一個單獨的字符串數組元素存儲。
分析:數組索引必須是int類型,或者能夠擴展爲int類型的值(所以,char、byte和short也是容許的)。
分析:數組的一個缺點是它的固定大小。一旦實例化,它的大小是固定的。ArrayList是一個使用數組的類,它會自動建立一個更大的數組,將舊數組複製到新數組中,這樣ArrayList就能夠根據須要更大。雖然這能夠解決拋出異常的問題,但它確實會致使性能較差,由於每次增長ArrayList大小時,必須從一個數組複製到另外一個數組。
分析:Java爲可變長度參數列表提供了特殊的表示法。省略號(…)用於指定可變長度參數列表。
分析:對ArrayList的前部分進行插入或刪除時,就會發生大量的元素複製,從而下降其效率。
Because his blog is writed by english, so my comment is also write by english.
Some of the ideas are different from me, and some of the questions I ask are not the ones I have encountered, which are very enlightening.
博客中值得學習的或問題:
仍是很全的,背景很好看
代碼中值得學習的或問題:
問題解釋仍需全面
概念不少,嘚仔細看,有不少細節,和前面的章節聯繫緊密。
代碼行數(新增/累積) | 博客量(新增/累積) | 學習時間(新增/累積) | 重要成長 | |
---|---|---|---|---|
目標 | 5000行 | 30篇 | 400小時 | |
第一週 | 95/95 | 1/1 | 18/18 | |
第二週 | 515/620 | 1/2 | 22/40 | |
第三週 | 290/910 | 1/3 | 20/60 | |
第四周 | 1741/2651 | 1/4 | 30/84 | |
第五週 | 579/3230 | 1/5 | 20/104 | |
第六週 | 599/3829 | 1/6 | 18/122 | |
第七週 | 732/4561 | 1/6 | 24/146 |
計劃學習時間:22小時
實際學習時間:24小時
改進狀況:稍有點
(有空多看看現代軟件工程 課件
軟件工程師能力自我評價表)