JAVA中super和this的區別和用法

2021-06-18 07:40:03 字數 2551 閱讀 8913

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

classperson

person()

person(string name)

}

publicclasschineseextendsperson

chinese(string name)

chinese(string name,intage)

publicstaticvoidmain(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.成員變數名 的方式來引用成員變數。當然,在沒有同名的情況下,可...