溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java的this和super關鍵字怎么用

發(fā)布時間:2022-05-05 11:05:25 來源:億速云 閱讀:151 作者:iii 欄目:編程語言

本文小編為大家詳細介紹“Java的this和super關鍵字怎么用”,內容詳細,步驟清晰,細節(jié)處理妥當,希望這篇“Java的this和super關鍵字怎么用”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

Java的this和super關鍵字怎么用

一、“ this ”關鍵字的使用

1. 概述

  • this是什么?

在Java中,this關鍵字比較難理解,它的作用和其詞義很接近,表示“當前”的意思。

2. 作用

this關鍵字可以用來修飾、調用:屬性、方法、構造器。
this關鍵字只能在方法內部使用。
它在方法內部使用,即這個方法所屬對象的引用;
它在構造器內部使用,表示該構造器正在初始化的對象。

3. 使用

  • 什么時候使用this關鍵字呢?

當在方法內需要用到調用該方法的對象時,就用this。具體的:我們可以用this來區(qū)分屬性和局部變量。比如:this.name = name;

3.1 修飾屬性和方法

this理解為:當前對象或當前正在創(chuàng)建的對象
在類的方法中,我們可以使用this.屬性this.方法的方式,調用當前對象屬性或方法。但是,通常情況下,我們都選擇省略this.。特殊情況下,如果方法的形參和類的屬性同名時,我們必須顯式的使用this.變量的方式,表明此變量是屬性,而非形參。
使用this訪問屬性和方法時,如果在本類中未找到,會從父類中查找。

代碼演示:

class Person{ // 定義Person類
    private String name ;
    private int age ;
    public Person(String name,int age){
      this.name = name ; 
      this.age = age ; }
    public void getInfo(){
      System.out.println("姓名:" + name) ;
      this.speak();
    }
    public void speak(){
      System.out.println(“年齡:” + this.age);
    } }
3.2 調用構造器

在類的構造器中,我們可以使用this.屬性this.方法的方式,調用當前正在創(chuàng)建的對象屬性或方法。但是,通常情況下,我們都選擇省略this.。特殊情況下,如果構造器的形參和類的屬性同名時,我們必須顯式的使用this.變量的方式,表明此變量是屬性,而非形參。

我們在類的構造器中,可以顯式的使用this(形參列表)的方式,調用本類中指定的其它構造器。

構造器中不能通過this(形參列表)方式調用自身的構造器。

如果一個類中有n個構造器,則最多有 n - 1個構造器中使用了this(形參列表)

規(guī)定:this(形參列表)必須聲明在當前構造器的首行。

構造器內部,最多只能聲明一個this(形參列表),用來調用其它的構造器。

除構造器之外,編譯器禁止在其它任何方法中調用構造器。

代碼演示:

class Person{ // 定義Person類
   private String name ;
   private int age ;
   public Person(){ // 無參構造器
     System.out.println("新對象實例化") ;
   }
   public Person(String name){
     this(); // 調用本類中的無參構造器
     this.name = name ;
   }
   public Person(String name,int age){
     this(name) ; // 調用有一個參數(shù)的構造器
     this.age = age;
   }
   public String getInfo(){
     return "姓名:" + name + ",年齡:" + age ;
   } }
3.3 返回當前對象

代碼演示:

public class Leaf {
    int i = 0;
    Leaf increment(){
        i++;
        return this;
    }
    void print(){
        System.out.println("i = "+i);
    }
    public static void main(String args[]){
        Leaf x = new Leaf();
        x.increment().increment().increment().print();//i = 3
    }}

二、“ super ”關鍵字的使用

1. 概述

(1)super理解為:父類的

(2)在Java類中使用super來調用父類中的指定操作:
super可用于訪問父類中定義的屬性。

super可用于調用父類中定義的成員方法。
super可用于在子類構造器中調用父類的構造器。
尤其當子父類出現(xiàn)同名成員時,可以用super表明調用的是父類中的成員,super的追溯不僅限于直接父類。
superthis的用法相像,this代表本類對象的引用,super代表父類的內存空間的標識。

2.使用

可以在子類中顯示地調用父類的結構。

3.使用

3.1 調用屬性和方法

我們可以在子類的方法或構造器中。通過使用"super.屬性“或”super.方法“的方式,顯式的調用父類中聲明的屬性或方法。但是,通常情況下,我們習慣省略”super."。

當子類和父類中定義了同名的屬性時,我們要想在子類中調用父類中聲明的屬性,則必須顯式的使用"super.屬性"的方式,表明調用的是父類中聲明的屬性。

當子類重寫了父類中的方法以后,我們想在子類的方法中調用父類中被重寫的方法時,則必須顯式的使用"super.方法"的方式,表明調用的是父類中被重寫的方法。

3.2 調用構造器

(1)子類中所有的構造器默認都會訪問父類中空參數(shù)的構造器。

(2)當父類中沒有空參數(shù)的構造器時,子類的構造器必須通過this(參數(shù)列表)或者super(參數(shù)列表)語句指定調用本類或者父類中相應的構造器,否則編譯出錯。同時,只能”二選一”,不能同時出現(xiàn),且必須放在構造器的首行。

(3)在類的多個構造器中,至少有一個類的構造器中使用了"super(形參列表)",調用父類中的構造器。

代碼演示:

public class Person {
    private String name;
    private int age;
    private Date birthDate;
    public Person(String name, int age, Date d) {
       this.name = name;
       this.age = age;
       this.birthDate = d; }
    public Person(String name, int age) {
       this(name, age, null);
    }
    public Person(String name, Date d) {
       this(name, 30, d);
    }
    public Person(String name) {
       this(name, 30);
    } }public class Student extends Person {
    private String school;
    public Student(String name, int age, String s) {
      super(name, age);
      school = s; 
    }
    public Student(String name, String s) {
      super(name);
      school = s; 
    }// 編譯出錯: no super(),系統(tǒng)將調用父類無參數(shù)的構造器。
    public Student(String s) { 
      school = s; 
    } }

三、this和super的區(qū)別

No.區(qū)別點thissuper
1訪問屬性訪問本類中的屬性,如果本類沒有此屬性則從父類中繼續(xù)查找直接訪問父類中的屬性
2調用方法訪問本類中的方法,如果本類沒有此方法則從父類中繼續(xù)查找直接訪問父類中的方法
3調用構造器調用本類構造器,必須放在構造器的首行調用父類構造器,必須放在子類構造器的首行

四、子類對象實例化的全過程

(1)從結果上來看:(繼承性)
子類繼承父類以后,就獲取了父類中聲明的屬性或方法。
創(chuàng)建子類的對象,在堆空間中,就會加載所有父類中聲明的屬性。

(2)從過程上來看:
當我們通過子類的構造器創(chuàng)建子類對象時,我們一定會直接或間接的調用其父類的構造器,進而調用父類的父類的構造器,…直到調用了java.lang.Object類中空參的構造器為止。正因為加載過所有的父類的結構,所以才可以看到內存中有父類中的結構,子類對象才可以考慮進行調用。

(3)明確:雖然創(chuàng)建子類對象時,調用了父類的構造器,但是自始至終就創(chuàng)建過一個對象,即為new的子類對象。

讀到這里,這篇“Java的this和super關鍵字怎么用”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。

AI