第三次学JAVA再学不好就吃翔(part34)--多态的成员访问
生活随笔
收集整理的這篇文章主要介紹了
第三次学JAVA再学不好就吃翔(part34)--多态的成员访问
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
學習筆記,僅供參考
文章目錄
- 面向對象
- 多態
- 多態概述
- 多態的成員訪問
- 成員變量
- 成員方法
- 靜態成員方法
面向對象
多態
多態概述
- 多態的概述
- 事物存在的多種形態
- 多態實現的前提
- 要有繼承關系
- 要有方法重寫
- 要有父類引用指向子類對象
- 舉個例子
輸出:
兔子吃提草多態的成員訪問
成員變量
我們先來看一個例子:
class PolymorphicTest1 {public static void main(String[] args) {Father f = new Son();System.out.println(f.num);} }class Father {int num = 10; }class Son extends Father {int num = 20; }輸出:
10咦?為啥結果是10呢?按照上面的例子,我還以為是20呢!
我們來畫一個內存圖來了解一下:
對于成員變量來說,編譯看左邊(Father),運行也看左邊(Father).
在父類引用指向子類對象中,我們左邊的數據類型是Father,所以我們只能拿到父類的成員變量num。
成員方法
我們看一段代碼:
class PolymorphicTest1 {public static void main(String[] args) {Father f = new Son();f.print();} }class Father {int num = 10;public void print() {System.out.println("Father");} }class Son extends Father {int num = 20;public void print() {System.out.println("Son");} }輸出:
Son對于成員方法來說,編譯看左邊(Father),運行看右邊(Son).
在父類引用指向子類對象中,編譯時JAVA看左邊(Father)是否有print()方法,而運行的時候卻調用的是右邊(Son)的print()方法。也就是說,如果父類(Father)中沒有print()方法,那么編譯將無法通過。
靜態成員方法
我們看一段代碼:
class PolymorphicTest1 {public static void main(String[] args) {Father f = new Son();f.print2(); //相當于Father.print2();} }class Father {int num = 10;public void print() {System.out.println("Father");}public static void print2() {System.out.println("Static Father");} }class Son extends Father {int num = 20;public void print() {System.out.println("Son");}public static void print2() {System.out.println("Static Son");} }輸出:
Static Father對于靜態成員方法來說,編譯看左邊(Father),運行也看左邊(Father).
- 總結
只有非靜態的成員方法是編譯看左邊(Father),運行看右邊(Son),其他的都是編譯看左邊(Father),運行也看左邊(Father)
總結
以上是生活随笔為你收集整理的第三次学JAVA再学不好就吃翔(part34)--多态的成员访问的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 初恋给你留下了怎样的爱
- 下一篇: 第三次学JAVA再学不好就吃翔(part