Java中this與super關鍵字

scbiaosdo發表於2018-04-18

this關鍵字

主要有三個應用:

 1this呼叫本類中的屬性,也就是類中的成員變數;
Public Class Student {
 String name; //定義一個成員變數name
 private void SetName(String name) { //定義一個引數(區域性變數)name
  this.name=name; //將區域性變數的值傳遞給成員變數
 }
}
this.name代表的就是物件中的成員變數,又叫做物件的屬性,而後面的name則是方法的形式引數,程式碼this.name=name就是將形式引數的值傳遞給成員變數。
 2this呼叫本類中的其他方法;
 this關鍵字除了可以呼叫成員變數之外,還可以呼叫構造方法。在一個Java類中,其方法可以分為成員方法和構造方法兩種。構造方法是一個與類同名的方法,在Java類中必須存在一個構造方法。如果在程式碼中沒有顯示的體現構造方法的話,那麼編譯器在編譯的時候會自動新增一個沒有形式引數的構造方法。這個構造方法跟普通的成員方法還是有很多不同的地方。如構造方法一律是沒有返回值的,而且也不用void關鍵字來說明這個構造方法沒有返回值。而普通的方法可以有返回值、也可以沒有返回值,程式設計師可以根據自己的需要來定義。不過如果普通的方法沒有返回值的話,那麼一定要在方法定義的時候採用void關鍵字來進行說明。其次構造方法的名字有嚴格的要求,即必須與類的名字相同。也就是說,Java編譯器發現有個方法與類的名字相同才把其當作構造方法來對待。而對於普通方法的話,則要求不能夠與類的名字相同,而且多個成員方法不能夠採用相同的名字。在一個類中可以存在多個構造方法,這些構造方法都採用相同的名字,只是形式引數不同。Java語言就憑形式引數不同來判斷呼叫那個構造方法。
this(); //無參構造
this("") ;//訪問當前類的有參構造
 3this呼叫本類中的其他構造方法,呼叫時要放在構造方法的首行。

super關鍵字作用

 1:主要存在於子類方法中,用於指向子類物件中父類物件。
 2:訪問父類的屬性
super.成員變數;(訪問父類)
 3:訪問父類的函式
super.xx()
 4:訪問父類的建構函式
super()://訪問的父類的無參構造
super("")://訪問的是父類的有參構造..

super關鍵字的使用

 1.子類的建構函式預設第一行會預設呼叫父類無參的建構函式,隱式語句
 2.子類顯式呼叫父類建構函式
在子類建構函式第一行通過super關鍵字呼叫父類任何建構函式。如果顯式呼叫父類建構函式,編譯器自動新增的呼叫父類無引數的構造就消失。建構函式間的呼叫只能放在第一行,只能呼叫一次。super()和this()不能同時存在建構函式第一行。


如果父類的無參構造沒有提供?怎麼辦?

 1)可以將父類的無參構造提供出來
 2)可以super關鍵字去訪問父類的帶參構造...
 3)還可以在子類中通過this(),訪問本類中的有參構造,間接的去訪問父類帶參構造
子類的構造方法必須有一個(有參構造/無參構造),讓父類進行初始化!

相關文章