1. 程式人生 > >想要成為VIP等級玩家嗎 先來學學繼承

想要成為VIP等級玩家嗎 先來學學繼承

java零基礎入門-面向物件篇(八)  繼承 與 封裝

每次看到繼承就勾起了我當年學習這塊知識的時候,那痛苦不堪的回憶。

當年學繼承的時候 到處都是 A啊B啊繼承啊,不僅看的頭皮發麻,還容易被繞暈,你們寫教材的大佬舉個輕鬆愉快的例子會懷孕嗎?啊啊啊???

再就是,動不動就是兒子老子,孫子爺爺,你繼承你爹的,你爹繼承你爺爺,你家關係是有多複雜,搞來搞去好像就你活著就是為了你爹那點私房錢,真是不忍直視。

為了好好解釋繼承這個東西,我專門研究了一下某大廠的VIP系統(小編如此用心良苦,你們忍心不點贊麼),此係統可是鼎鼎大名的,我們從系統功能設計的角度來看看繼承。

什麼是繼承 ?為什麼要繼承 ?

java裡面繼承關係的關鍵字是extends,而這個單詞卻跟繼承八竿子打不著關係,其實我們通常說的繼承應該描述為 擴充套件 才更加準確。

關鍵字

在我們為一個系統寫功能的時候,會遇到這種情況,新建了一個類,用著用著發現又要新建一個類,而這個類只與前面那個類有些許不同,大部分是相同的,而我們不得不去將屬性啊,方法啊重新再寫一遍。我們前面說了,寫程式碼千萬不要複製貼上,我們學習的方法是在類的內部,將邏輯重用的一種方法,而繼承,則是將類重用的一種方法。

比如下面我們要說的VIP系統,VIP有3個等級,VIP1,VIP2,VIP3,普通玩家是player,VIPLevelOne 是VIP1級使用者,他們有相同的基礎屬性和方法,但是如果我們不使用繼承,會是這樣。

重複的程式碼

 

作為一個程式設計師,我們必須有基本的修養,眼裡不能容下任何一粒沙子,相同的程式碼就是沙子。如果使用繼承,我們完全可以重用程式碼,VIP使用者也是使用者,他可以通過繼承獲得使用者player的全部屬性和方法。

 

繼承直接獲取屬性和方法

 

除了程式碼的重用,繼承更常用的一個用法就是擴充套件類。為什麼要擴充套件?我們看下下面這個場景。

有時候,你加入一家心儀已久的公司,上頭交代一個任務,準備就緒,開始擼程式碼,突然發現,你需要使用一個方法,然後這個方法的最上面有一行註釋,寫著 “作者 XXX 20XX年 建立”, XXX就是你的老闆,這時候咋辦,你去改你老闆寫的程式碼?先不說能不能改,這個系統已經跑了很久了,你把它改了,萬一出了問題,那不是開除走人就能解決的了,萬一造成大面積的系統崩潰,可是要賠錢的,你真的想刪庫跑路麼?。。。

就算能改,你是瞧不起你老闆麼?他老人家的程式碼你也要改?你以為你是誰?

改嘛~不敢~  不改嘛~任務完成不了怎麼交差啊,這時候,繼承的特性就派上用場了。

我們完全可以不去改這個類,而是用另一個類來繼承他,當我們繼承一個類的時候,除了獲得這個類的全部屬性,方法和構造器的使用權,還可以自己寫同名屬性,同名方法,這樣我們就可以在不改變原來老闆寫的程式碼的情況下,來 “修改” 這個類了。關於這個特性我們後面章節詳細說。

vip 系統介紹

寫程式碼之前,先要弄清楚 需求 ,需求設計可是需要在寫程式碼之前完成的。

玩過遊戲的同學都知道,有個大廠的遊戲,充錢越多,越牛X。如何牛X?

 

確認下眼神

確認過眼神~~是充過錢的人~~我把你舉報~而卻封我的號~~  

這就是VIP的氣勢,自帶氣場光環,不服不行啊。

我們看看你要充多少錢才能成為VIP。

 

VIP充值金額

 

每個等級的VIP可以獲得的服務是不同的,等級越高獲得的服務越牛,簡直就是給你開了官方版外掛。外掛太多,我們挑幾個看看。

 

VIP專屬許可權

我們看了系統需求,來看看我們如何把他抽象成類,如何設計這個VIP體系。

vip的繼承設計

首先最基礎的是玩家,就是Player類,然後我們的VIP1直接繼承Player,VIP2擁有全部的VIP1特權,並且有自己新的特權,VIP2繼承VIP1。同理,VIP3繼承VIP2。這樣,我們就可以使用繼承特性完成三個類的建立。

 

VIP的繼承關係

從這個繼承關係看到,java裡的繼承只能有一個直接的父類,這就是所謂的單繼承。只能有一個直接的父類,就是說可以有多個間接的父類,父類的父類就是間接的父類。直接父類只能有一個,而間接父類可以有多個。

封裝

這裡有必要先講一下封裝的概念,我們後面介紹繼承的時候,要使用到封裝的知識。

在很久以前我介紹java語言特性的時候就稍微說明了一下封裝的概念,比如我們很多網站或者app裡面填寫資訊的時候,是不會給你直接填年齡的,而是通過你的出生日期計算出你的年齡,這就是封裝。程式為了避免一些常識上的錯誤會將部分的功能對使用者 “遮蔽”,使用者是不能直接操作的。

再比如,我們在做專案的時候,肯定不是一個在戰鬥,而是一個團隊協作的過程,在協作的過程中,你會發現各種各樣的奇葩隊友。一個大家都要使用的方法,專門安排一位 “武林高手” 去寫,結果這位高手寫的東西真的是慘不忍睹,如果用他寫的公共方法肯定是BUG滿天飛,到時候還得被批評自己的程式碼出問題。

怎麼辦?直接說啊,XXX你這寫的什麼亂七八糟的破玩意!別激動,這位高手的姐姐的姑媽的朋友的親戚是你領導,人家是有關係的,你不給點面子?沒辦法,自己寫吧,但是你寫的要是被別人發現了,別人也要用你的程式碼了,這時候,封裝就派上用場了,直接在方法前面加一個private,好了,只能在自己類裡面用,這個世界從此安靜了。

我們設計一個類的時候,有時候跟設計一個軟體產品有一些相同的思想。我們對使用者遮蔽不需要知道的細節,只留部分我允許的功能暴露出去。好吧說人話,使用者雖然是上帝,但是有些上帝喜歡搞破壞,我只能開放一些指定的功能讓使用者去用,並且保證無論使用者怎麼操作都不會對系統產生破壞。

 

按一下就能起飛

 

再舉個栗子,我們開車的時候,是不是隻用按一下啟動,車就開了?你需要把引擎蓋開啟,對著發動機一頓操作讓他啟動嗎?發動機就是對使用者隱藏了,而那個按一下就啟動車子的按鈕,就是對使用者暴露的功能,我無論怎麼按,車的發動機都不會被破壞。這個發動機就是一個私有方法,外部不可見。

訪問修飾符有3個,private (私有),protected(受保護),public(公開),還有一種就是你不寫,他會有個預設的許可權 default。一般來說private 和 public使用最為頻繁,而protected是專門用來給子類重寫的。下面來看看這幾個修飾符。

 

訪問限制

 

關於繼承的一些複雜的,繞口的規定我們下一章繼續說