Java之Super詳解

weixin_44553953發表於2020-12-23

Java之Super詳解

如何在子類中訪問父類的一些屬性或者方法?這篇文章教會你正確使用super。

先定義Person類,定義受保護的變數name,

public class Person {   
    protected String name="zfp";
    }

再定義Student類,繼承Person類,並且定義一個函式來輸出名字。我們想,如何分別輸出函式輸入引數的name,子類的name以及父類的name呢?

public class Student extends Person{
    private String name="zxn";
    public void test(String name){
        System.out.println(name);
        System.out.println(this.name);
        System.out.println(super.name);
    } 
}

上面程式碼中第一個name很顯然是函式傳入引數的name,this.name肯定指代的是Student類中的name,而如何輸出Person類的name呢?我們用super.name來獲取父類的引數。

定義測試類如下:

public class Application {
    public static void main(String[] args) {
        Student student=new Student();
        student.test("123");
        
    }
}

執行測試類,輸出如下:

123
zxn
zfp

結果符合我們的預期,第一個輸出是test函式輸入的引數,第二個輸出的是Student類的name,第三個輸出的是父類的name。

在Person類中定義print函式如下:

public void print(){
        System.out.println("Student");
    }

如何在Student類中呼叫父類方法?我們試一下:

public void print(){
        System.out.println("Student");
    }

    public void test1(String name){
        print();
        this.print();
        super.print();
    }

Student類裡面 test1方法中,第一個print呼叫自己的print函式,this.print也是一樣的,super.print則能成功呼叫父類的print方法。輸出如下:

Student
Student
Person

符合我們的預期。

下面我們做一個嘗試,把父類的public函式變成私有的:

private void print(){
        System.out.println("Student");
    }

會發現這個時候子類無法呼叫父類的方法了。在此說明:

私有的東西無法被繼承!

我們在子類和父類中分別加入顯式構造器:

public Person(){
        System.out.println("Person的無參構造");
    }
public Student() {
        System.out.println("Student類的無參構造");
    }

輸出結果:

Person的無參構造
Student類的無參構造

我們發現,父類的無參構造方法先被呼叫,說明子類的構造方法中包含隱藏程式碼super(),呼叫了父類的構造方法,即:

public Student() {
        super();
        System.out.println("Student類的無參構造");
    }

如果確實要像上面這樣在子類的構造器中顯式地定義父類的構造方法,那麼:
呼叫父類的構造器,必須要在子類構造器的第一行!

綜上,super的注意點如下:

  1. super呼叫父類的構造方法,必須在構造方法中的第一個;
  2. super必須只能出現在子類的方法或者構造方法中;
  3. super和this不能同時呼叫構造方法。

VS this:

  1. 代表物件不同:this是本身呼叫者這個物件,super代表父類引用的物件;
  2. this:沒有繼承也可以使用,super只能是繼承的情況下使用;
    3.this()是本類的構造方法,super()是父類的構造方法。

相關文章