java 多态_Java 多态
Java多態,在之前的向上轉型的文章中已經介紹了使用場景和為什么要通過向上轉型實現運行時多態,請先看文章:張艦:Java 向上轉型和向下轉型
這篇文章主要是總結一下Java多態的概念,具體的例子請參考向上轉型那篇文章。
1、面向對象編程的三大特性
繼承、封裝和多態。
繼承
繼承的目的是為了少寫重復代碼。有一些類具有共同的特點,具體表現在有相同的成員屬性和方法,將這些具有相同特征的成員屬性和方法提煉出來,組成一個父類,子類繼承這個父類,相同的成員屬性和方法僅在父類里定義,子類可以直接使用,這樣在子類里僅定義每個類獨有的方法和成員屬性,少寫重復代碼。
封裝
封裝隱藏了類的內部實現機制,對外僅提供公共的接口供外部對象使用,這樣做的好處是解耦。試想一下當方法的內部實現機制改變了,但對外提供的接口沒有改變,外部業務邏輯對類的內部實現不感知,這樣及時升級或者優化了內部實現,也不會影響外部調用這個接口的業務邏輯。
多態
多態的目的也是為了少寫重復代碼,當方法的入參是引用時體現的更清晰。定義一個父類的引用,指向子類的對象,這個引用具體指向的是哪個子類在編譯時不能確定,只有在運行時才能確定,這就是所謂的動態綁定。這樣只寫一份代碼,就可以讓引用指向不同子類的對象,讓程序選擇多個運行狀態,增強了程序的擴展性。
2、多態的分類
多態分為編譯時多態和運行時多態。
編譯時多態
編譯時多態是指函數重載。同名函數具有不同的參數列表(參數類型不同、參數個數不同或者二者都不同),這類函數就實現了函數重載。編譯時多態是靜態的,在編譯期間根據實際調用方法的參數列表就能確定到底調用的是哪個函數。
運行時多態
運行時多態就是上面講的動態綁定,在編譯期間不能確定父類的引用指向的是具體哪個子類的對象,只有在程序實際運行時才能確定,我們這里講的主要是運行時多態。
3、運行時多態的實現條件
運行時多態的三個必要條件:繼承、重寫和向上轉型。
- 繼承:在多態中必須存在有繼承關系的子類和父類;
- 重寫:子類必須對父類的某些方法進行重寫,這樣父類的引用在調用這些方法時才會在運行時確定調用的是哪個子類的方法;
- 向上轉型:必須存在父類的引用指向子類的對象,該引用不僅可以調用父類的成員和方法,也可以調用子類里重寫了父類的方法,但是不能調用子類里有而父類里沒有的方法。
4、運行時多態的實現形式
運行時多態的實現形式有兩種:繼承和接口,在向上轉型中體現如下:
- 接口:聲明一個接口類型的引用,指向實現了該接口的類的對象,實現了該接口的類存在多個;
- 繼承:聲明一個父類的引用,指向子類對象,繼承了該父類的子類存在多個。
接口的例子我懶得寫了,繼承的例子見向上轉型那篇文章。
參考
java提高篇(四)-----理解java的三大特性之多態 - chenssy - 博客園?www.cnblogs.com張艦:Java 向上轉型和向下轉型?zhuanlan.zhihu.com總結
以上是生活随笔為你收集整理的java 多态_Java 多态的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python的总结与心得词云设计理念_P
- 下一篇: 进程控制常用的一些操作