this通常指當前物件,super則指父類的。當你想要引用當前物件的某種東西,比如當前物件的某個方法,或當前物件的某個成員,你便可以利用this來實現這個目的,當然,this的另乙個用途是呼叫當前物件的另乙個建構函式,如果你想引用父類的某種東西,則非super莫屬。
最普遍的情況就是,在你的方法中的某個形參名與當前物件的某個成員有相同的名字,這時為了不至於混淆,你便需要明確使用this關鍵字來指明你要使用某個成員,使用方法是「this.成員名」,而不帶this的那個便是形參。還可以用「this.方法名」來引用當前物件的某個方法,但這時this就不是必須的了,你可以直接用方法名來訪問那個方法,編譯器會知道你要呼叫的是那乙個。下面的**演示了上面的用法:
public class demothis
public void setname(string name)
public void etage(int age)
public void print()
public static void main(string args)
protected void setage(int age)
protected void print()
} public class demosuper extends person
public static void main(string args)
} 在demosuper中,重新定義的print方法覆寫了父類的print方法,它首先做一些自己的事情,然後呼叫父類的那個被覆寫了的方法。輸出結果說明了這一點:
demosuper:
name=kevin age=22
這樣的使用方法是比較常用的。另外如果父類的成員可以被子類訪問,那你可以像使用this一樣使用它,用「super.父類中的成員名」的方式,但常常你並不是這樣來訪問父類中的成員名的。
在建構函式中建構函式是一種特殊的方法,在物件初始化的時候自動呼叫。在建構函式中,this和super也有上面說的種種使用方式,並且它還有特殊的地方,請看下面的例子:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
class
person
person()
person(string name)
}
public
class
chinese
extends
person
chinese(string name)
chinese(string name,
int
age)
public
static
void
main(string args)
}
在這段程式中,this和super不再是像以前那樣用「.」連線乙個方法或成員,而是直接在其後跟
上適當的引數,因此它的意義也就有了變化。super後加引數的是用來呼叫父類中具有相同形式的
建構函式,如1和2處。this後加引數則呼叫的是當前具有相同引數的建構函式,如3處。當然,在
chinese的各個過載建構函式中,this和super在一般方法中的各種用法也仍可使用,比如4處,你
可以將它替換為「this.prt」(因為它繼承了父類中的那個方法)或者是「super.prt」(因為它
是父類中的方法且可被子類訪問),它照樣可以正確執行。但這樣似乎就有點畫蛇添足的味道
了。
java中this和super的區別
一 this 1 屬性訪問 訪問本類中的屬性,如果本類中沒有此屬性,則從父類中繼續查詢 2 方法 訪問本類中的方法,如果本類中沒有此方法,則從父類中繼續查詢 3 呼叫構造 呼叫本類構造,必須放在構造方法的首行 4 表示當前物件 二 super 1 屬性訪問 訪問父類中的屬性 2 方法 直接訪問父類中...
Java中this和super的區別
this通常指當前物件,super則指父類的。當你想要引用當前物件的某種東西,比如當前物件的某個方法,或當前物件的某個成員,你便可以利用this來實現這個目的,當然,this的另乙個用途是呼叫當前物件的另乙個建構函式。如果你想引用父類的某種東西,則非super莫屬。在一般方法中最普遍的情況就是,在你...
java中super和this用法總結
一 this 第一 通過this呼叫另乙個構造方法,用法是this 引數列表 這個僅僅在類的構造方法中,別的地方不能這麼用。第二 函式引數或者函式中的區域性變數和成員變數同名的情況下,成員變數被遮蔽,此時要訪問成員變數則需要用 this.成員變數名 的方式來引用成員變數。當然,在沒有同名的情況下,可...