Java中 this 和 super 關鍵字理解

首先還是來看一下例子:

package thisExample;

public class Student {

  private String name;
  private Long id;

  public Student () {

  }

  public Student (Long id) {
    this();
    this.id = id;
  }

  public Student (Long id, String name) {
    this(id);
    this.name = name;
  }

  public void print () {
    System.out.println("A method of super class");
  }

}
package thisExample;

public class MiddleStudent extends Student {

  private String book;

  public MiddleStudent () {

  }

  public MiddleStudent (Long id, String name) {
    super(id, name);
  }

  public MiddleStudent (Long id, String name, String book) {
    this(id, name);
    this.book = book;
  }

  public void print () {
    System.out.println("Override the super class method!");
  }

  public void show () {
    this.print(); //這裏爲了區分比較,沒有將this取消掉
    super.print();
    System.out.println("A method of sub class");
  }

}
package thisExample;

public class StudentTest {

  public static void main(String[] args) {
    MiddleStudent ms = new MiddleStudent();
    ms.show();
  }

}

// 輸出結果:Override the super class method!
//          A method of super class
//          A method of sub class

1.首先看一下超類Student類中用到的this,有兩種用法,一種是this()或者this(para...) ;另外一種是this.para

第一種情況只能用在構造器中,也就是一個構造器可以調用另一種構造器,但是構造器不能調用自己本身,也就是不能在構造器中形成遞歸;

第二種情況是調用當前類的成員變量和方法。在類中構造器或非構造器方法中都可以使用。其實個人覺得第二中情況一般都是使用this調用當前類的變量,來區分與變量同名的方法參數,當調用方法的時候,this可以直接省略掉。。。

2.接着看一下Student的子類MiddleStudent,是怎樣調用this和super的。

this(para...)的用法還是不變的,這裏主要比較一下this(para...)super(para...)

這裏寫圖片描述

這裏寫圖片描述

看上面兩個圖就很明顯,super(para...) 調用的是父類的構造器,而this(para...) 調用的是當前對象的構造器。

我們都知道不管是super(para...) 還是this(para...) 都只能放在構造器的第一行,所以他倆不能混用,反正就是一個構造器只能調用他倆之中的一個。

super可以調用父類所有非私有的成員變量和方法,這時就不能像this調用方法那麼任性可以取消的,如果想調用父類的方法,必須加上super。

寫到這裏大家應該都清楚這兩個用法和區別了,以後遇到其他的再補充。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章