多重继承_Python 和 Java 基础对比 10 —— 类的封装、继承和多态
@Python大星
一、Python 類的封裝、繼承和多態
封裝
繼承
Python 支持多父類的繼承機制,所以需要注意圓括號中基類的順序,若是基類中有相同的方法名,并且在子類使用時未指定,Python 會從左至右搜索基類中是否包含該方法。一旦查找到則直接調用,后面不再繼續查找。解決了多重繼承的沖突問題。
多態
狗、貓、豬都繼承了動物類,并各自重寫了 kind 方法。show_kind () 函數接收一個 animal 參數,并調用它的 kind 方法。可以看出,無論我們給 animal 傳遞的是狗、貓還是豬,都能正確的調用相應的方法,打印對應的信息。這就是多態。
二、Java 類的封裝、繼承和多態
封裝
隱藏對象的屬性和實現細節,僅對外提供公共訪問方式,將變化隔離,便于使用,提高復用性和安全性。
1、封裝的優點
① 良好的封裝能夠減少耦合。
② 類內部的結構可以自由修改。
③ 可以對成員變量進行更精確的控制。
④ 隱藏信息,實現細節。
2、如何理解 Java 的封裝?
將類的某些信息隱藏在類內部,不允許外部程序直接訪問,而是通過該類提供的方法來實現對隱藏信息的操作和訪問,常見的實現方式就是:getter、setter。
假設我們的類 Person 是這樣:
如果在外部代碼使用它,則需要:
但是,現實中如果很多外部代碼都使用了 Person 這個類;某一天,如果這個類的 age 需要換成 String 類型,那么,外部使用它的任何地方都需要需改 xxx.age="xxx"。
如果我們使用 getter、setter
這樣外部其他地方就不需要改了。
我們在 getter、setter 中還可以對成員變量進行精準的控制
繼承
繼承就是子類繼承父類的特征和行為,使得子類對象(實例)具有父類的實例域和方法,或子類從父類繼承方法,使得子類具有父類相同的行為。如下圖
如果不用繼承,代碼可能這樣
Mouse 類
Cat 類
我們可以發現里面有很多重復性的代碼。
如果我們使用繼承
公共類 Animal
Cat類
Mouse 類
1、繼承的注意事項
① 子類只能繼承父類非私有的成員(成員方法和成員變量)
② 子類不能繼承父類的構造方法,但是可以通過 super 關鍵字去訪問父類構造方法
this 和 super 的區別?
this 代表本類對象的引用,super 代表父類存儲空間標識。
【你一定遇到過Java 面試繼承相關題目】
第一關:
Parent 類
Son 類
輸出結果:
第二關:
Parent 類
Son 類
輸出結果:
Java 是單繼承的,那為什么不能允許多繼承?
假設有一個老虎類,既繼承父類貓科,又繼承父類動物科,如果兩個父類都有一個“吃”的方法,那么當我們調用 “叫” 這個方法時,它就不知道是貓科叫還是動物叫了,這就是多重繼承的沖突。
多態
多態是同一個行為具有多個不同表現形式或形態的能力。多態就是同一個接口,使用不同的實例而執行不同操作。
1、多態的優點
① 消除類型之間的耦合關系
② 可替換性
③ 可擴充性
④ 接口性
⑤ 靈活性
⑥ 簡化性
2、多態存在的三個必要條件
繼承重寫【初級面試必問:重寫和重載的區別?】
① 重寫
重寫是子類對父類的允許訪問的方法的實現過程進行重新編寫,返回值和形參都不能改變。即外殼不變,核心重寫!
重寫的好處在于子類可以根據需要,定義特定于自己的行為。 也就是說子類能夠根據需要實現父類的方法。
重寫方法不能拋出新的檢查異常或者比被重寫方法申明更加寬泛的異常。
② 重載
是指一個類中方法名稱相同,但參數的個數,類型或順序不同與返回值無關!
注意:比如說你方法名fun相同,參數個數,類型順序相同,但是返回值一個是 void,一個是 String,這不構成重載。試想一下,如果我們調用這個方法,fun(a,b),機器如何判斷我們是調用哪一個呢?結論:不要讓機器做不確定的事情。
父類引用指向子類對象① 向上轉型:將一個子類的引用賦給一個超類變量,編譯器是允許的,不用進行強制類型轉換。
格式: 超類 超類變量 = new 子類 ();
② 向下轉型:但是將一個超類的引用賦給 一個子類變量,必須進行強制類型轉換,這樣才能夠通過運行時的檢查
格式: 子類 子類對象變量名 =(子類) 父類對象引用
結論:當超類類變量引用子類對象
訪問成員變量時:訪問的是父類的成員變量
訪問成員方法時:先訪問的是超類的此方法,如果此方法被子類覆蓋,則調用子類的方法。并且不能訪問子類特有的方法
父類
子類
輸出結果:
>>>Python 和 Java 基礎對比 09 —— 類的介紹
總結
以上是生活随笔為你收集整理的多重继承_Python 和 Java 基础对比 10 —— 类的封装、继承和多态的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: golang jwt设置过期_听说你的J
- 下一篇: 北京环球影城要门票吗
