20145207 2016-2017-2 《Java程式設計》第4周學習總結

來源:互聯網
上載者:User

標籤:第一個   解決   相同   構造   方式   名稱   技術分享   str   通過   

一.繼承與多態

1.繼承的定義

面對對象中,子類繼承父類,避免重複的行為定義,不過並非為了避免重複定義行為就使用繼承,濫用而繼承會導致程式維護上的問題。

程式碼重複在程式設計上就是不好的訊號,多個類間出現重複的代碼時,設計上可以考慮的改進方式之一,就是把相同的程式提升為父類。

在java中,繼承時使用extends關鍵字,private成員也會被繼承,只不過子類無法直接存取,必須通過父類提供的方法來存取。

在Java中,子類只能繼承一個父類,繼承有個重要的關係,就是子類和父類之間會有is-a的關係,要開始理解多態,必須Crowdsourced Security Testing道操作的對象是哪一類。

第一個是可以啟動並執行RPG軟體。第二個這是被繼承的代碼。這個是對於劍士的定義,通過繼承來實現。這個是對於魔法師的定義,通過繼承來實現。

雖然SwordsMan與Magician沒有定義getName()、getLevel()、與getBlood()等方法,但從Role繼承了這些方法,所以就如同例子中可以直接使用。 繼承的好處之一,就是若要將name、level、blood改為其他名稱,那就只要修改Role.java就可以了,只要是繼承Role的子類都無須修改。 最後的程式運行結果:

雖然介面挺low的哈,看了後面的東西,再填進去幾個介面也不是啥難事。好想做個遊戲啊,要超厲害的那種。

2.多態與is-a

在Java中,子類只能繼承一個父類,繼承除了可避免的行為定義外,還有個重要的關係,那就是子類和父類之間會有is-a的關係。

編譯器就是語法檢查器,要知道程式片段為何可以通過編譯,為何無法通過編譯,就是將自己當做編譯器,檢查文法邏輯是否正確,方式是從=號的右邊往左邊讀:右邊是不是左邊的一種。

什麼是多態?以抽象講法解釋,就是使用單一的介面操作多種類型的對象。檢查多態文法邏輯是否正確,方式是從右邊往左讀:右邊是不是一種左邊呢?如果不是就會編譯失敗,如果加上扮演文法,編譯器就會讓程式碼通過編譯,不過後果自負,也就是扮演失敗,執行時會拋出ClassCastException。

3.重新定義

在繼承父類之後,定義與父類中相同的方法部署,但執行內容不同,這稱為重新定義。因為對父類中已定義的方法執行不滿意,所以在子類中重新定義執行。

4.final關鍵字

如果class前使用了final關鍵字定義,那麼表示這個類是最後一個了,不會再有子類,也就不能被繼承。定義方法時,也可以是限定該方法為final,這表示最後一次定義方法了,也就是子類不可以重新定義final方法。

· 介面與多態

抽象類別:java可以定義沒有方法體的方法,該方法的具體實現由子類完成,該方法稱為抽象方法,包含抽象方法的就是抽象類別。抽象類別和抽象方法必須用abstruct關鍵字來修飾。

interface:介面定義行為但不可定義操作。 介面中的成員修飾符是固定的。類與介面是實現關係,而且類可以繼承一個類的同時實現多個介面。

public interface Swimmer{    public abstract void main swim();}

implements:類要操作介面,使用implements關鍵字,操作介面時,對介面中定義的方法的兩種處理方式:1.操作介面中定義的方法,2.將該方法標示為abstract

類與類之間存在著繼承關係,類與介面中間存在的是實現關係。繼承用extends,實現用implements

在interface介面中常常可以定義枚舉常數(例:public static final int),實際上,在interface介面中也只能定義public static final的枚舉常數,並且一定要使用=指定值,否則就會編譯錯誤。

抽象類別與介面的區別 1:抽象類別只能被繼承,而且只能單繼承。 介面需要被實現,而且可以多實現。 2:抽象類別中可以定義非抽象方法,子類可以直接繼承使用。 介面中都有抽象方法,需要子類去實現。 3:抽象類別使用的是 is a 關係。 介面使用的 like a 關係。 4:抽象類別的成員修飾符可以自訂。 介面中的成員修飾符是固定的。全都是public的。

enum:enum文法可用於定義枚舉常數,enum實際上定義了類,而enum中列舉的常數實際上是public static final,無法撰寫程式直接執行個體化枚舉類型,因為建構函式許可權設定為private,只有類中才可以執行個體化。enum 可定義枚舉常數,但實際上 enum 定義了特殊的類,繼承自 java.lang.Enum,編譯過後會產生 Action.class 檔案,可用這個 Action 宣告類型

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

剛開始學習繼承的時候敲第一個角色遊戲代碼出現錯誤,在繼承的時候,需要將完整的代碼都放在同一個檔案夾下,書中有時候只是展現一部分代碼,但前面的角色定義還要敲上去,保證代碼的完整性,這樣子類才會繼承父類。 教材中的一些內容講得十分詳盡,例如多態與is-a,翻來覆去講不同的語句可能出現的編譯失敗的情況及原因,這部分的學習也十分重要,關係到以後寫出來的東西有沒有彈性、好不好維護的問題;書中也有一些表述比較少,讓人看得不是很懂的地方,例如instanceof運算子,Override等,只能通過視頻加以學習。現階段還停留在敲書上代碼的過程,希望自己能夠在接下來提出些更有價值的問題。

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

被聲明為protected的成員,相同包中的類可以直接存取,不同包中的類需要在繼承後的子類中存取。代碼中沒有繼承關係不同類,編譯失敗,刪去protected編譯通過結果為10

 

代碼託管

有啥說啥,這周什麼代碼也沒敲,周日之前不知能不能回來,先把部落格提交(就是單純複製之前寫過的,您不想看複製的代碼,我就把代碼部分刪掉了)。

後續再往上面補。

20145207 2016-2017-2 《Java程式設計》第4周學習總結

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.