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

gugu99發表於2008-05-24
Java中的兩個特殊變數this和super (轉)[@more@]

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


  在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(引數列表)的形式。

 

 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-1004498/,如需轉載,請註明出處,否則將追究法律責任。

相關文章