標籤:android
80 PM擼代碼之Android【武俠篇:封裝、繼承、多態】
這是Android系列的第六篇文章,在之前的一篇文章中,已經瞭解了物件導向的基礎概念,這一篇將會通過武俠江湖的類比,講解物件導向的更多內容,感謝小夥伴們一直以來的支援。
武林門派的三個特徵
1 獨門秘籍(封裝)
2 傳承的門派(繼承)
3 看情況使功夫和換個姿勢說明問題(多態)
【封裝】1 門派獨門秘籍(封裝)
前一篇已經說到,當達摩上了嵩山以後,江湖就正式進入門派時代。每個門派區別於其他門派,肯定是因為這個門派擁有獨門武功秘籍。舉個栗子你就懂了:
對應的物件導向的程式中,一個類(注意停頓。。。)區別於另外一個類的重要原因就是這個類擁有自己的封裝屬性。封裝的作用,就是保護某些屬性和方法不被外部看見,就像武俠裡,每個門派的獨門秘籍和功夫套路,基本上是傳內不傳外的。
換句話說,就是你門派的獨門秘籍(私人屬性),別人不能隨便訪問,只有通過一定的方法才能訪問,這樣讓屬於你門派的東西更加安全。
2 如何封裝
武俠版幫派 丐幫{ 獨門秘籍 降龍十八掌; 獨門秘籍 打狗棒法;}----------------------------------程式版class GaiBang{ private String Xianglong; private String Dagou;}(程式封裝是通過關鍵字private(加粗)哦)
3 你為什麼需要秘籍呢?
(1)創立門派需要秘籍
假如你是逍遙老祖,它是無崖子、天山童姥、李秋水的師傅,虛竹的師祖。你窮盡畢生心血創立的武功,總是需要一個秘密的地方存放的吧,不然隨便就被別人學了過去,你還怎麼當絕頂高手啊?(我覺得逍遙老祖是金庸系列裡功夫排名前5的狠角色。。。)
門派 逍遙派{ 獨門秘籍 神秘的秘籍書; 窮盡心血寫就秘籍(書){ 神秘的秘籍書=書 } 獲得之前寫的秘籍(){ 時空閃回,讓你回憶起自己之前寫的秘籍; } 對外吹牛 { 我們逍遙派的絕頂神功是神秘的秘籍書(加粗),像你這樣的,我們一個打你們八個,怎麼樣,加入我們吧,目前開班價9.9折,一共998,你就能把北冥神功帶回家。 }}真實發生的故事(){ 逍遙派 逍遙老祖; 逍遙老祖是逍遙派出身的; 逍遙老祖窮盡畢生心血寫就“北冥神功”,並把它存入門派; 逍遙老祖在某次高峰論壇使用了技能“對外吹牛”;}
(2)在程式世界裡,你需要私人屬性(加private),它們不能輕易訪問,只能通過一定的方法訪問(通過set和get方法即可完成對封裝屬性的訪問和設定)。
class XiaoYao{ private String book;//聲明私人屬性(秘籍) //聲明吹牛方法(加粗),使用者向小白宣傳你的門派 void talk(){ System.out.println(“我們逍遙派的絕頂神功是”+getBook()+“,像你這樣的,我們一個打你們八個,怎麼樣,加入我們吧,目前開班價9.9折,一共998,你就能把北冥神功帶回家。”) } //setBook方法用於將你畢生心血寫就的秘籍存入私人屬性book中,你終於可以安心的翻牌睡覺了。。。 public void setBook(String str){ book=str; } //getBook方法用於在你的門派內部將秘籍取出,記得洗乾淨手哈。。。 public void getBook(){ return book; }}public class Test{ public static void main(String[] args){ XiaoYao XiaoYaoLaoZu=new XiaoYao; XiaoYaoLaoZu.setBook(“北冥神功”); XiaoYaoLaoZu.talk();}setBook把“北冥神功”傳入了你的門派,然後你通過“吹牛方法”調用了getBook,將你剛才傳入的秘籍說給大家聽。
【繼承】
史上最困擾哲學家的一個問題:這個世界上究竟是先有蛋,還是先有雞呢?我們這裡不討論哲學的終極問題,說到這裡,哲學的終極問題有哪些呢?我還挺感興趣的,有空瞭解一下^_^。
扯遠了,武俠的世界跟Java的世界真是高度類似,就連繼承都很一致。
武俠世界裡,門派也是有繼承關係的,舉個栗子:
(1)少林派是其他所有門派的祖先
(2)天鷹教出自明教
(3)星宿派出自逍遙派
無論是什麼情況,你的門派只能繼承另一個門派,而不能是同時繼承兩個門派。
(1)你創立一個門派想同時繼承武當和丐幫,你想得很美,想同時學會太極拳和降龍十八掌,但是你願意,人家不願意,白搭。。。
(2)但是這樣的繼承是允許的:星宿派出自逍遙派,逍遙派出自少林達摩
門派 少林{ 武功 基礎拳腳功夫;}門派 逍遙派 繼承 少林派{ 武功 八荒六合唯我獨尊功;}門派 星宿派 繼承 逍遙派{ 武功 化功大法;}(因為是繼承關係,逍遙派和星宿派都會少林派的基礎拳腳功夫)
而在Java的世界裡,一個類也只可以繼承另一個類,而不能同時繼承多個類。對於物件導向的程式而言,它的精華在於類的繼承可以以既有的類為基礎,進而派生出新的類。
class ShaoLin{ String BasicKongfu;}class XiaoYao extends ShaoLin{ String bahuangliuheweiwoduzungong;}class XingXiu extends XiaoYao{ String huagongdafa;}(Java中類的繼承要用到關鍵字extends哦,不要忘記了)
【多態】
多態在程式中就是方法的重載和重寫。什麼是重載和重寫呢?
(1)重載:方法名稱相同,參數的類型和個數不同
重載在武俠世界裡,就像看情況使功夫,根據你的套路不同,而選擇不同的對策。少林寺非常出名的“少林72絕技”,根據你使用的不同套路,達摩院的掌院和尚就能識別出你是用的哪些功夫:
功夫 少林72絕技{ 你耍了一套功夫(拳法){ 你使用了少林羅漢拳; } 你耍了一套功夫(拳法,指法){ 你使用了少林羅漢拳和無相劫指; } 你耍了一套功夫(拳法,腳法,指法){ 你使用了你使用了少林羅漢拳和無相劫指,還有如影隨形腿; }}
用程式語言就像下面,重載就是根據你傳入的參數個數來選擇調用不同的構造方法。
class ShaoLin72JueJi{ public void ShaoLin72JueJi(String quan){ System.out.println("你使用了少林羅漢拳"); } public void ShaoLin72JueJi(String quan,String zhi){ System.out.println("你使用了少林羅漢拳和無相劫指"); } public void ShaoLin72JueJi(String quan,String jiao,String zhi){ System.out.println("你使用了少林羅漢拳和無相劫指,還有如影隨形腿"); }}
(2)重寫:方法名稱、參數的類型、傳回值類型全部相同,但完成的功能不同
重寫往往出現在子類繼承父類中,武俠裡,星宿派出自逍遙派,他們的獨家內功是一樣的,逍遙派對外宣稱他們的獨門內功是“北冥神功”,而星宿派對外宣稱他們的獨門內功是“化功大法”。其實就是“換個姿勢說明問題”。
門派 逍遙派{ 對外吹牛(){ 逍遙派獨門內功——北冥神功; }}門派 星宿派 繼承 逍遙派{ 對外吹牛(){ 星宿派獨門內功——化功大法; }}
程式語言是這樣的。。。
class XiaoYao{ public void DuJiaNeiGong(){ System.out.println("逍遙派獨門內功——北冥神功"); }}class XingXiu extends XiaoYao{ public void DuJiaNeiGong(){ System.out.println("星宿派獨門內功——化功大法"); }}
PM擼代碼之Android【武俠篇:封裝、繼承、多態】