2017-08-12 70 views
-1

當我調用超類方法ma()時,它正在打印B的地址。我的問題是在這個程序中這個關鍵字的功能是什麼。爲什麼在打印語句中使用this關鍵字不會給出語法錯誤,而是會給super關鍵字帶來錯誤。爲什麼它只會打印B的引用而不是A類。爲什麼'this'關鍵字返回B類地址?

class A 
    { 
     public void ma() 
     { 
      System.out.print(this); //printing address of B why? 
     } 
    } 
    class B extends A 
    { 
     public void mb() 
     { 
     super.ma(); //calling super class method 
     } 
     public static void main(String[] args) 
     { 
     A re=new B(); //creating object for class B 
     re.mb(); //calling method mb() of class B 
     } 
    } 
+3

...因爲你正在創建一個'B',所以'this'是一個'B'? – chrylis

+0

是什麼使這隻打印B的地址?這個程序內部如何工作? –

+0

這裏沒有地址。有調用Object.toString()的結果。這不是一個地址。 – EJP

回答

0

this是將當前對象基準 - 其方法或構造被調用

ma()A類的方法是使用B類的實例間接調用的對象。

A re=new B(); //creating object for class B 
    re.mb(); 
0

this始終指向調用方法的對象。 總是

仔細看看你的代碼,你有沒有有沒有創建了A的新實例?否。然後,沒有標識符可以引用A對象,因此邏輯上,您的代碼不會輸出A對象的地址。

我想你誤會了super的含義。它只是意味着「調用這個方法的超類實現」,而不是「通過創建超類的實例來調用這個方法」。因此,super只會在您的派生類具有不同的方法實現方式時纔會有所作爲。在這裏,它沒有。

即使您正在調用超級實現,您調用此方法的對象也不會更改。它仍然是this

+0

謝謝。收藏 –

+0

@AjithKM如果您認爲我的答案回答了您的問題,請考慮點擊該選中標記以接受它! – Sweeper

相關問題