java mongodb drivers 2升级到3_JAVA从头开始一基础梳理(3-2)
本章為大家介紹類的特性。
首先,第一個特性----封裝。
在這個類別中,屬性id 與屬性 color 是可以被外部直接訪問和修改的,比如
可以看到,事實上這樣的內容是錯誤的,我們需要在定義屬性值時需要加入驗證等等操作,這時,我們就需要對類做出封裝
如此,直接對于類的屬性訪問變?yōu)椴豢稍L問。那么如果我們需要對類的屬性操作時改怎么辦呢,這時,我們需要的是為這些私有屬性提供訪問函數(shù)。
我們?yōu)镃ar類的id和color類提供了get/set函數(shù),這時我們可以使用對應函數(shù)來操作私有的屬性值,如下圖.
同時,在set函數(shù)中做賦值判斷,即可對設置的值做效驗。
封裝一定程度上保證了類數(shù)據(jù)的安全性,但在其他方面,也提高了類屬性訪問的難度。
接下來,我們來了解類的第二個特性---繼承。
回到上一節(jié),我們發(fā)過這樣一張關系圖
其中卡車和轎車均屬于車這個類別,我們用代碼來實現(xiàn)如下
我們可以看到,因為卡車本來屬于車下的一個分類,所以很自然,他擁有了車這個類別的一些通用的屬性(還有函數(shù)),既然是車類別下的一個子類,那么我們只需要讓卡車類獲得車類別的通用屬性。
加入extends關鍵字,繼承了Car的公用屬性,這里需要說明的是,繼承關系直接獲得的是父級類的公用屬性,即public關鍵字所修飾的屬性及函數(shù)(這里不討論protected),看如下代碼
我們看到,當使用Truck對象調用Car類屬性length時是成功的,而調用id屬性卻失敗,這就是因為id屬性的修飾符為private。那么如果我們需要訪問父類的private屬性時,需要怎么做呢,首先,我們需要父類提供public修飾的私有屬性訪問函數(shù),即get/set,然后,在子類中使用super關鍵字進行調用。
此時,使用Truck對象的getSuperId函數(shù)即可訪問父類私有屬性。
ps:實際上按照我的代碼的寫法,是添加了復雜度,是沒有必要的,一般來說,作為父類,也只會提供通用,public修飾的屬性。這里只是為了演示如何使用所以故意做這樣的設計。
繼承特性一定程度上簡化了代碼,但是也降低了一定的代碼可讀性,同時需要注意,每一個類只可以有一個父類,可以有無限多個子類。
類特性的最后一個----多態(tài)
多態(tài),指對象的多種形態(tài),多態(tài)有一些必要條件,需要有繼承或實現(xiàn)(實現(xiàn)是接口的一種邏輯,在后續(xù)章節(jié)會有介紹),必須重寫或實現(xiàn)父類函數(shù)或接口,引用需要指向子類對象。
具體使用看如下碼圖(繼承)
可以看到 Truck類重寫了Car父類的go函數(shù)(使用override注解,表示當前函數(shù)為覆蓋父類函數(shù)),此時我們看看如下幾個調用示例
運行結果為
這就說明,當程序運行時對于函數(shù),調用父類函數(shù)還是子類函數(shù)的依據(jù)是具體實現(xiàn)。
總結
以上是生活随笔為你收集整理的java mongodb drivers 2升级到3_JAVA从头开始一基础梳理(3-2)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 高斯滤波及其原理
- 下一篇: Java randomString