您好,登錄后才能下訂單哦!
小編給大家分享一下Java中多態成員訪問的特點有哪些,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
多態概要
多態是面向對象編程的三個特性之一,這里不展開做過多介紹,有機會專門寫一個關于繼承,封裝,多態三大特性的文章.
我之前在力扣學習模塊中整理過一部分關于這方面的內容,可以先簡單了解一下.
力扣知補-面向對象-繼承
Java多態使用最多的場景在于父類引用指向子類對象.
多態的前提:
存在繼承關系(Son繼承Father)
存在方法重寫(Son重寫Fahter中的Walk方法)
父類引用指向子類對象(Father father = new Son(true);
)
多態情景下主要涉及三部分的訪問規則,分別是對成員變量,成員方法和靜態方法的訪問.
這里只拷貝多態測試類的代碼,同時簡單介紹一下Father類和Son類的情況.
Father類中有一個boolean canRun
變量固定為False
,子類中的canRun
成員變量由構造方法傳入.
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(); } }
成員變量訪問規則
Father father = new Son(true);
成員變量訪問口訣是編父運父或者編左運左,進一步簡化成為看父類.
解釋:就是在編譯階段只要父類能夠通過編譯,無論右側的類怎么定義都不會報錯,在執行過程中的執行結果也是按照父類中變量來決定運行的結果.
雖然我們給Son
中傳入的參數是true
,但是對于成員father
中的變量的訪問還是由父類決定.
所以當我們使用father.isCanRun()
訪問canRun
變量的時候返回的結果是false
成員方法訪問規則
成員方法訪問口訣是編父運子或著編左運右.
展開解釋就是在編譯階段只要父類能夠通過編譯,無論右側的類怎么定義都不會報錯,在執行過程中的執行結果需要按照子類中重寫的方法(兒子中重寫方法返回的是兒子是否能跑)來決定運行的結果.
所以當我們調用father.walk()
方法的時候返回的結果是兒子只能跑!
.
靜態方法訪問規則
靜態方法訪問的口訣是編父運父或編左運左和成員變量一樣都是看父類.
/* 在父類和子類中都添加上靜態方法 */ // 父類 public static void run(){ System.out.println("父親遇到搶劫犯了!不得不跑!"); } // 子類 public static void run(){ System.out.println("兒子遇到搶劫犯了!不得不跑!"); }
調用father.run()
返回的結果是父親遇到搶劫犯了!不得不跑!
證明了在多態情況下調用靜態方法時還是調用的左側-父類中定義的靜態方法.
這部分我的理解也不是特別深刻,以后有時間還想補充集中情況
子類中是否能夠在靜態代碼塊中調用父類的靜態方法等等場景
先繼續向后學習,后面會整理Java虛擬機相關知識,結合類的加載等內容可能回頭會對這部分理解更深刻.
以上是“Java中多態成員訪問的特點有哪些”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。