Java中this和super的區別

2021-07-09 01:45:38 字數 1754 閱讀 8720

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) }

這段**很簡單,不用解釋你也應該能看明白。在建構函式中你看到用this.print(),你完全可以用print()來代替它,兩者效果一樣。下面我們修改這個程式,來演示super的用法。

class person

protected void setage(int age)

protected void print()

}public class demosuper extends person         

public static void main(string args) }

結果:demosuper:

name=kevin age=22

在demosuper中,重新定義的print方法覆寫了父類的print方法,它首先做一些自己的事情,然後呼叫父類的那個被覆寫了的方法。

這樣的使用方法是比較常用的。另外如果父類的成員可以被子類訪問,那你可以像使用this一樣使用它,用「super.父類中的成員名」的方式,但常常你並不是這樣來訪問父類中的成員名的。

在建構函式中建構函式是一種特殊的方法,在物件初始化的時候自動呼叫。在建構函式中,this和super也有上面說的種種使用方式,並且它還有特殊的地方,請看下面的例子:

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」(因為它是父類中的方法且可被子類訪問),它照樣可以正確執行。但這樣似乎就有點畫蛇添足的味道了。最後,寫了這麼多,如果你能對「this通常指代當前物件,super通常指代父類」這句話牢記在心,那麼本篇便達到了目的,其它的你自會在以後的程式設計實踐當中慢慢體會、掌握。

java中this和super的區別

一 this 1 屬性訪問 訪問本類中的屬性,如果本類中沒有此屬性,則從父類中繼續查詢 2 方法 訪問本類中的方法,如果本類中沒有此方法,則從父類中繼續查詢 3 呼叫構造 呼叫本類構造,必須放在構造方法的首行 4 表示當前物件 二 super 1 屬性訪問 訪問父類中的屬性 2 方法 直接訪問父類中...

java中super和this用法總結

一 this 第一 通過this呼叫另乙個構造方法,用法是this 引數列表 這個僅僅在類的構造方法中,別的地方不能這麼用。第二 函式引數或者函式中的區域性變數和成員變數同名的情況下,成員變數被遮蔽,此時要訪問成員變數則需要用 this.成員變數名 的方式來引用成員變數。當然,在沒有同名的情況下,可...

JAVA中super和this的區別和用法

this通常指當前物件,super則指父類的。當你想要引用當前物件的某種東西,比如當前物件的某個方法,或當前物件的某個成員,你便可以利用this來實現這個目的,當然,this的另乙個用途是呼叫當前物件的另乙個建構函式,如果你想引用父類的某種東西,則非super莫屬。最普遍的情況就是,在你的方法中的某...