欧美亚洲中文,在线国自产视频,欧洲一区在线观看视频,亚洲综合中文字幕在线观看

      1. <dfn id="rfwes"></dfn>
          <object id="rfwes"></object>
        1. 站長資訊網(wǎng)
          最全最豐富的資訊網(wǎng)站

          詳細解析Java的this和super關鍵字

          本篇文章給大家?guī)砹岁P于java的相關知識,其中主要介紹了關于關鍵字中this和super的相關問題,以及他們的一些區(qū)別,下面一起來看一下,希望對大家有幫助。

          詳細解析Java的this和super關鍵字

          推薦學習:《java視頻教程》

          一、“ this ”關鍵字的使用

          1. 概述

          • this是什么?

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

          2. 作用

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

          3. 使用

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

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

          3.1 修飾屬性和方法

          this理解為:當前對象或當前正在創(chuàng)建的對象
          在類的方法中,我們可以使用this.屬性this.方法的方式,調(diào)用當前對象屬性或方法。但是,通常情況下,我們都選擇省略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 調(diào)用構(gòu)造器

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

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

          構(gòu)造器中不能通過this(形參列表)方式調(diào)用自身的構(gòu)造器。

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

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

          構(gòu)造器內(nèi)部,最多只能聲明一個this(形參列表),用來調(diào)用其它的構(gòu)造器。

          除構(gòu)造器之外,編譯器禁止在其它任何方法中調(diào)用構(gòu)造器。

          代碼演示:

          class Person{ // 定義Person類    private String name ;    private int age ;    public Person(){ // 無參構(gòu)造器      System.out.println("新對象實例化") ;    }    public Person(String name){      this(); // 調(diào)用本類中的無參構(gòu)造器      this.name = name ;    }    public Person(String name,int age){      this(name) ; // 調(diào)用有一個參數(shù)的構(gòu)造器      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來調(diào)用父類中的指定操作:
          super可用于訪問父類中定義的屬性。

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

          2.使用

          可以在子類中顯示地調(diào)用父類的結(jié)構(gòu)。

          3.使用

          3.1 調(diào)用屬性和方法

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

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

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

          3.2 調(diào)用構(gòu)造器

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

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

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

          代碼演示:

          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)將調(diào)用父類無參數(shù)的構(gòu)造器。     public Student(String s) {        school = s;      } }

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

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

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

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

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

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

          推薦學習:《java視頻教程》

          贊(0)
          分享到: 更多 (0)
          網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號