Java中的兩個特殊變數this和super

來源:互聯網
上載者:User
變數 Java中的兩個特殊變數this和super2001-04-26· ·Wayne ··yesky  在Java中有兩個非常特殊的變數:this和super,這兩個變數在使用前都是不需要聲明的。this變數使用在一個成員函數的內部,指向當前對象,當前對象指的是調用當前正在執行方法的那個對象。super變數是直接指向超類的建構函式,用來引用超類中的變數和方法。因此它們都是非常有用的變數,下面我想介紹一下this和super的使用方法。  1、this  讓我們先看一段代碼吧:  class PersonInformation  {   String name,gender,nationality,address;   int age;   void PersonInformation(String p_name,String p_gender,String p_nationality,String p_address,int p_age)   {    name=p_name;    gender=p_gender;    nationality=p_nationality;    address=p_address;    age=p_age;   }  }   你會發現,在PersonInformation()函數中這個對象的方法提示可以直接存取對象的成員變數的,而且在同一個範圍中,定義兩個相同的名字的局部變數是不允許的,如果確實想使類的成員變數和方法的參數或方法自己定義的局部變數同名的話就需要想一種方法使成員變數與更它同名的方法參數或局部變數區分開來,這就要使用到this變數。下面我想改寫一下上面的代碼,使PersonInformation類的建構函式的每個參數都有與對象成員變數相同的名字,而成員變數的初值由參數給出。  class PersonInformation   {    String name,gender,nationality,address;    int age;    void PersonInformation(String name,String gender,String nationality,String address,int age)    {    this.name=name;    this.gender=gender;    this.nationality=nationality;    this.address=address;    this.age=age;    }   }  由上一例中,我們可以看出,該建構函式中必須使用this,this在方法體重用來指向引用當前正在執行方法的那個對象執行個體,this變數的類型總是為包含前執行方法的類,上例中,我們要區別參數name和成員變數name,寫成name=name顯然是不允許的,在參數或局部變數名與類成員變數同名的時候,由於參數或局部變數的優先順序高,這樣在方法體中參數名或局部變數名將隱藏同名的成員變數,因此,為了值名成員變數,你必須使用this顯示地指明當前對象。  有時候會遇到這種情況,我們全面的訪問當前對象,而不是訪問某一個個別的執行個體對象,我們也可以使用this,並利用Java中的toString()方法(它能夠返回一個描述這個對象的字串)如果把任何一個對象傳遞到System.out.println方法中,這個方法調用這個對象的toString方法,並列印出結果字串,所以,我們可以用如下方法System.out.println(this),來列印出任何對方法固有參數的目前狀態。  this還有一個用法,就是建構函式的第一個語句,它的形式是this(參數表),這個建構函式就會調用同一個類的另一個相對的建構函式。請看下面的例子:  class UserInfo   {   public UserInfo(String name)   {    this(name,aNewSerialNumber);   }   public Userinfo(String name,int number)   {    userName=name;    userNumber=number;   }   }  如果你調用UserInfor newinfotable = new UserInfo("Wayne Zheng")後,就會自動調用UserInfo(String name,int number)建構函式。   可見,熟練掌握this在Java程式設計過程中是非常重要的  2、super  在Java中,有時還會遇到子類中的成員變數或方法與超類(有時也稱父類)中的成員變數或方法同名,因為子類中的成員變數或方法名優先順序高,所以子類中的同名成員變數和方法就隱藏了超類的成員變數或方法,但是我們如果想要使用超類中的這個成員變數或方法,此使就需要用到super,請看下面的類。   class Country   {    String name;    void value()    {     name="China";    }   }  下面的子類中,自類的成員變數和方法隱藏了超類的成員變數name和方法value(),   class City extends Country    String name;    void value()     {     name="Hefei";     super.value();     System.out.println(name);     System.out.println(super.name);    }    為了在子類中引用超類中的成員變數name和方法value(),在代碼中我們使用了super,super.name和super.value();   所以顯示的結果為   Hefei   China   如果我們想要使用超類的建構函式則應當使用super(參數列表)的形式。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.