Java多態(tài)成員訪問的特點是什么?
Java多態(tài)成員訪問的特點
多態(tài)概要
多態(tài)是面向?qū)ο缶幊痰娜齻€特性之一,這里不展開做過多介紹,有機會專門寫一個關于繼承,封裝,多態(tài)三大特性的文章.
我之前在力扣學習模塊中整理過一部分關于這方面的內(nèi)容,可以先簡單了解一下.
力扣知補-面向?qū)ο?繼承
Java多態(tài)使用最多的場景在于父類引用指向子類對象.
多態(tài)的前提:
- 存在繼承關系(Son繼承Father)
- 存在方法重寫(Son重寫Fahter中的Walk方法)
- 父類引用指向子類對象(
Father father = new Son(true);
)
Java多態(tài)情景下成員訪問特點
多態(tài)情景下主要涉及三部分的訪問規(guī)則,分別是對成員變量,成員方法和靜態(tài)方法的訪問.
這里只拷貝多態(tài)測試類的代碼,同時簡單介紹一下Father類和Son類的情況.
Father類中有一個boolean canRun
變量固定為False
,子類中的canRun
成員變量由構(gòu)造方法傳入.
walk(boolean canRun):如果canRun是True則輸出Father/Son可以跑,否則輸出Father/Son只能走.
public class Test { public static void main(String[] args) { Father father = new Son(true); System.out.println(father.isCanRun()); father.walk(father.isCanRun()); father.run(); } }
成員變量訪問規(guī)則
Father father = new Son(true);
成員變量訪問口訣是編父運父或者編左運左,進一步簡化成為看父類.
解釋:就是在編譯階段只要父類能夠通過編譯,無論右側(cè)的類怎么定義都不會報錯,在執(zhí)行過程中的執(zhí)行結(jié)果也是按照父類中變量來決定運行的結(jié)果.
雖然我們給Son
中傳入的參數(shù)是true
,但是對于成員father
中的變量的訪問還是由父類決定.
所以當我們使用father.isCanRun()
訪問canRun
變量的時候返回的結(jié)果是false
成員方法訪問規(guī)則
成員方法訪問口訣是編父運子或著編左運右.
展開解釋就是在編譯階段只要父類能夠通過編譯,無論右側(cè)的類怎么定義都不會報錯,在執(zhí)行過程中的執(zhí)行結(jié)果需要按照子類中重寫的方法(兒子中重寫方法返回的是兒子是否能跑)來決定運行的結(jié)果.
所以當我們調(diào)用father.walk()
方法的時候返回的結(jié)果是兒子只能跑!
.
靜態(tài)方法訪問規(guī)則
靜態(tài)方法訪問的口訣是編父運父或編左運左和成員變量一樣都是看父類.
/* 在父類和子類中都添加上靜態(tài)方法 */ // 父類 public static void run(){ System.out.println("父親遇到搶劫犯了!不得不跑!"); } // 子類 public static void run(){ System.out.println("兒子遇到搶劫犯了!不得不跑!"); }
調(diào)用father.run()
返回的結(jié)果是父親遇到搶劫犯了!不得不跑!
證明了在多態(tài)情況下調(diào)用靜態(tài)方法時還是調(diào)用的左側(cè)-父類中定義的靜態(tài)方法.
這部分我的理解也不是特別深刻,以后有時間還想補充集中情況
子類中是否能夠在靜態(tài)代碼塊中調(diào)用父類的靜態(tài)方法等等場景
先繼續(xù)向后學習,后面會整理Java虛擬機相關知識,結(jié)合類的加載等內(nèi)容可能回頭會對這部分理解更深刻.
參考/擴展閱讀
Java基礎系列第三彈之操作字符串的類都有哪些?區(qū)別是什么?
到此這篇關于Java多態(tài)成員訪問的特點是什么?的文章就介紹到這了,更多相關Java多態(tài)成員訪問內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
使用maven一步一步構(gòu)建spring mvc項目(圖文詳解)
這篇文章主要介紹了詳解使用maven一步一步構(gòu)建spring mvc項目,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-09-09Mybatis如何使用動態(tài)語句實現(xiàn)批量刪除(delete結(jié)合foreach)
這篇文章主要介紹了Mybatis如何使用動態(tài)語句實現(xiàn)批量刪除(delete結(jié)合foreach),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-03-03Spring MVC入門_動力節(jié)點Java學院整理
這篇文章主要介紹了Spring MVC入門,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-08-08基于SpringBoot+Redis實現(xiàn)分布式鎖
本文主要介紹了基于SpringBoot+Redis實現(xiàn)分布式鎖,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-05-05通過Feign進行調(diào)用@FeignClient?找不到的解決方案
這篇文章主要介紹了通過Feign進行調(diào)用@FeignClient?找不到的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-03-03