Java中的兩個特殊變數this和super (轉)
中的兩個特殊變數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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- php中兩個網頁之間的變數傳送 (轉)PHP網頁變數
- Java 中 this 和 super 的用法詳解Java
- Java中super的用法Java
- shell中特殊變數$0 $1 $# $$ $! $?的涵義變數
- perl正規表示式中的特殊變數變數
- 交換兩個變數變數
- Java 中 this 和 super 的用法概述及異同Java
- Java中計算兩個日期間的天數Java
- 交換兩個整型變數變數
- Swift交換兩個變數的值Swift變數
- 如何交換兩個變數的值變數
- js不使用第三個變數交換兩個變數的值JS變數
- 不用第三個變數,直接交換兩個變數的值變數
- java 變數(轉)Java變數
- 不使用臨時變數交換兩個變數的值變數
- Perl 常用特殊變數變數
- perl常用特殊變數變數
- 星號變數的特殊用法變數
- SHLVL 和 BASH_SUBSHELL 兩個變數的區別變數
- 翻譯|Rust臨時變數的生命週期和“Super Let”Rust變數
- python中星號變數的幾種特殊用法Python變數
- JAVA介面中的變數Java變數
- JAVA中...的特殊用法。Java
- Java 泛型中? super T和? extends T的區別Java泛型
- python 交換兩個變數的方式Python變數
- 史上最糟糕的兩個變數名變數
- 世上最糟糕的兩個變數名變數
- php不用第三個變數,交換兩個數的值PHP變數
- 如何不使用臨時變數,交換兩個變數的值。變數
- Java 兩個整數相除保留兩位小數,將小數轉化為百分數Java
- java中變數的作用域Java變數
- c語言 - 交換兩個變數(不建立臨時變數)兩種方法C語言變數
- 面試題-JavaScript交換兩個變數的方法面試題JavaScript變數
- 網際網路廣告的兩個變數變數
- static變數在php和java中的生命週期變數PHPJava
- JavaScript兩個變數交換值(不使用臨時變數)JavaScript變數
- Java中static變數作用和用法詳解Java變數
- java常量和變數Java變數