多態在成員變量,成員函數以及靜態函數中的用法區別

示例代碼

class fu
{
   void show()
   {
       System.out.println("父類...run ! ");
   }    
}
class zi extends fu
{
    void show()
    {
       System.out.println("子類...run ! ");
    }
}

1、成員函數(非靜態)——(存在動態綁定的特點)


編譯時:要查看引用變量所屬的類中是否有所調用的成員
運行時:要查看對象所屬的類中是否有所調用的成員


eg:
//前提:zi和fu中都有show方法
fu f=new zi();
​​f.show();
輸出的是zi中的show方法,但是在編譯的時候是查看fu中的show方法。
簡單來說,編譯時看等號左邊,輸出結果(運行時)看等號的右邊。


動態綁定:
fu f=new zi();中f對應的是zi對象的地址,所以是輸出zi中的show函數(show方法不是靜態函數,所以該方法的存在依靠着對象而存在)


2、成員變量


只查看引用變量所屬的類中是否有所調用的成員變量


eg:
fu f=new zi();
此時,zi已經向上轉型成爲了fu,所以調用的是fu中的變量
簡單來說,就是看等號的左邊

3、靜態函數

eg:
//前提:zi和fu中都有show方法
fu f=new zi();
​​f.show();
輸出fu中show方法


解釋:靜態方法是不依賴與對象而存在的。類一加載靜態方法就存在了,所以fu中的show與fu從一開始就綁定在一起,而zi中的show與zi也從一開始就綁定在一起,所以調用的時候就依賴於誰調用,所以用f調用時,對應fu中的show方法。

也可以理解爲——靜態就不涉及多態,因爲多態是相對於對象而存在的,但是靜態是不依賴於對象的,所以靜態不涉及多態。

簡單來說,編譯和運行都看等號左邊。


總結

成員變量和靜態函數都看左邊;

成員函數編譯看左邊,運行看右邊;


發佈了19 篇原創文章 · 獲贊 36 · 訪問量 17萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章