關於類、父類、抽象類、介面之間聯絡的一點點思考
最近稍微理了一下類、普通父類、抽象類、介面之間的聯絡,對它們的理解比之前稍微好了那麼一點。
首先先了解一下什麼是類,在這之前,我們需要了解一下java中物件的概念,其實java這種面向物件的程式語言就是為了描述我們所處的大千世界,那麼java中的物件就是這個世界上一草一木的對應,比如我正在使用的這臺電腦,我們寢室對面的一棵樹等等,世界上每一個具體的東西都是一個物件,我想這也是java這種面嚮物件語言的由來。類呢?就是對物件的抽象化、概念化,用一個統一的代號來稱呼具有相同特徵的一堆物件,比如說:人類就是對我們人的統稱,書就是對《java從入門到精通》《大話資料結構》等的統稱。
瞭解了物件和類的基本概念後,接下來進入正題,我身邊有兩個兄弟,分別是膝上型電腦類和PC電腦類,他們有共同之處(都能上網打遊戲),也有不同之處(筆記本方便攜帶,而PC就不行),但他們從小沒有父親,兩個人相依相偎的遊蕩在這個世界上,有一天,他們找到了他們的親生父親-電腦類,他們開心極了,他們發現他們的父親居然也能打遊戲,他們終於想通了:打遊戲這個功能是從父親那裡繼承過來的,但他們又各自產生了一些變異,膝上型電腦變得容易攜帶,PC則不容易攜帶。他們的父親電腦類又接著說道:你們再仔細觀察觀察我。過了一會兒膝上型電腦類興奮的說:爸爸,你只是具有攜帶這個功能,但並沒有指明攜帶是否方便。他們的父親說:正因為我無法確定攜帶這個動作究竟是方便還是不方便,所以特地加了個abstract修飾,也正因為如此,我本身又不得不給我自己加個abstract緊箍咒,這也是我與普通父類的區別,對了,再告訴你們一個訊息,其實你們還有其他的兄弟。說完他們的父親就走了,他們不得不繼續遊蕩下去。
只從上次這兩兄弟的父親告訴他們還有其他的兄弟之後,他們就一直搗騰著怎麼聯絡其他兄弟,終於有一天他們找到了介面-聯網介面,聯網介面告訴他們:你們必須用implements實現我,才可以聯絡到你們的其他兄弟,他們很開心,在介面的幫助下很快聯絡到了他們的另外一個兄弟-量子計算機。
到這裡相信大家對父類,抽象類,介面之間的聯絡稍微瞭解了一下,現在總結一下:
1:將子類共同的屬性和方法提取出來,單獨形成一個類-父類
2:如果父類中的方法無法具體化,就需要我們用abstract修飾,此時普通父類就變成了抽象類
3:由於子類只能有一個親生父類,所以子類要想實現其他的一些功能就必須要實現介面,這就是介面的由來
下面我們在詳細說說程式設計中的具體運用:
現在有兩個類,分別是pc電腦類和筆記本
如果現在有10臺pc電腦和10檯筆記本電腦,需要我們找出他們之間運算速度最快的,怎麼辦?由於程式設計中我們直接將不同的類放在一起比較,所以一般我們可能先找出pc中運算最快的,然後找出筆記本運算最快的,最後在比較最快pc和最快筆記本,找到那個運算最快的。
有了父類之後,我們可以讓上面兩個類繼承電腦類,運用向上造型,通過一次迴圈找出那個最快的電腦
是不是解決了無法直接比較兩個類的問題,這就是父類和向上造型的魅力。
Ps:向上造型指的是父類引用指向子類物件
現在上述的coms[0]這臺pc電腦想連線其他電腦,怎麼辦?我們需要讓pc類實現連線介面,但是我們又知道coms[0]這個引用是點不出來connect這個方法的,這個時候就需要我們進行向下造型,然後再執行connect方法,是不是很贊。
通過上面的程式碼coms[0]就可以聯絡其他兄弟啦。
最後總結一下:造型(向上和向下)是父類和介面 之間的重要紐帶,也只有造型才能讓他們的作用發揮出來。