1、繼承編程
咱們在建立一些類時,會發現他們之間存在相同的屬性和方法,如設計一個動物表示類:
像這樣的代碼就存在了大量的冗餘代碼,仔細分析會發現這三個類有相同的eat方法和相同的name屬性。從邏輯上分析,Cat和Bird都是Animal,咱們就可讓二者繼承Animal類,這樣Animal就是被繼承的類,也叫父類,基類或者超類,而Bird和Cat叫子類或者派生類。他們之間就構成了繼承關係。
繼承的語法規則:
1.繼承使用extends指定父類。
2.在Java中,一個子類只能繼承一個父類。
3.子類會繼承父類全部public的方法和字段,而對於父類中全部private的方法和字段是沒法訪問的。
4.子類能夠用super關鍵字獲得父類實例的引用。ide
上面的代碼使用繼承改編後以下:
oop
經過上述代碼咱們能夠看出繼承能夠使代碼達到重用的效果。
但若是把name改爲private時,子類就沒法訪問父類。
如圖:
可是若是使用public就違背了oop語言三大特性之一:封裝,因此把字段改成protected是最佳的解決辦法。看以下代碼
分析上述代碼報錯的緣由能夠知道其餘包中的類,對於protected修飾的字段和方法不能夠訪問,對於類的調用者來講,protected修飾的字段和方法也是不能夠訪問的。this
此外,若是用final關鍵字修飾類,這個類也是不能被繼承的。看以下代碼:
設計
2、組合3d
和繼承相似,組合也能達到代碼重用的效果。組合表示has- a,繼承表示is- a,如用一個類表示學校,學校裏有學生也有老師,示例以下:
對象
3、多態blog
動態綁定也叫運行時綁定即多態,發生動態綁定的前提是:
1.向上轉型,父類引用子類對象
向上轉型的三種狀況:
(1)直接賦值
(2)方法傳參
(3)方法返回
2.子類和父類有同名的覆蓋方法
3.經過父類的引用,調用該重寫方法
以下就是動態綁定的實例:
運行結果:
那麼使用多態有什麼好處呢?
1.下降了類的調用者對類的使用成本
2.下降了圈複雜度,避免了使用大量的if-else
3.可擴展能力更強
注意super和this的區別,super表示父類對象的引用,this表示當前對象的引用。繼承
4、抽象類接口
爲了使代碼可以被繼承,須要創造抽象類。好比創造一個抽象類表示形狀:
抽象類不能被實例化,抽象方法也不能是private,抽象類中也能夠包含其餘非抽象類方法及字段。
5、接口
接口是抽象類的更進一步,包含的方法都是抽象方法,字段只能包含靜態常量。一個類能夠繼承一個類,而且同時實現多個接口。如:
(1)接口使用interface來實現
(2)接口中的方法必定是抽象方法,所以能夠省略abstract
(3)接口中的方法必定是public,所以能夠省略public
(4)接口不能單獨被實例化
(5)接口能夠繼承一個接口
剛涉及Java語言的面向對象編程,還有不少深邃的東西沒有挖掘出來,有待後續。