1. 程式人生 > 其它 >Java 基礎(super關鍵字)

Java 基礎(super關鍵字)

super關鍵字

  1. super 理解為: 父類的

  2. super 可以用來呼叫:屬性,方法,構造器

  3. super 的使用
    3.1 我們可以在子類的方法或構造器中。通過使用 "super.屬性" 或 "super.方法" 的方式,顯式的呼叫父類中宣告的屬性或方法。但是,通常情況下,我們習慣省略 "super."
    3.2 特殊情況: 當子類和父類中定義了同名的屬性時,我們要想在子類中呼叫父類中宣告的屬性,則必須顯式的使用 "super.屬性" 的方式,表明呼叫的是父類中宣告的屬性。
    3.3 特殊情況:當子類重寫了父類中的方法以後,我們想在子類的方法中呼叫父類中被重寫的方法時,則必須顯式的使用 "super.方法" 的方式,表明呼叫的是父類中被重寫的方法。

  4. super呼叫構造器
    4.1 我們可以在子類的構造器中顯式的使用 "super(形參列表)" 的方式,呼叫父類中宣告的指定的構造器
    4.2 "super(形參列表)" 的使用,必須宣告在子類構造器的首行!
    4.3 我們在類的構造器中,針對於 "this(形參列表)" 或 "super(形參列表)" 只能二選一,不能同時出現
    4.4 在構造器的首行,沒有顯示的宣告 "this(形參列表)" 或 "super(形參列表)",則預設呼叫的是父類中空參的構造器,super()
    4.5 在類的多個構造器中,至少有一個類的構造器中使用了 "super(形參列表)",呼叫父類中的構造器

子類物件例項化的全過程

  1. 從結果上來看: (繼承性)
    子類繼承父類以後,就獲取了父類中宣告的屬性或方法
    建立子類的物件,在堆空間中,就會載入所有父類中宣告的屬性

  2. 從過程上來看:
    當我們通過子類的構造器建立子類物件時,我們一定會直接或間接的呼叫其父類的構造器,進而呼叫父類的父類的構造器.直到呼叫了 java.lang.Object 類中空參的構造器為止。正因為載入過所有的父類的結構,所以才可以看到記憶體中有父類中的結構,子類物件才可以考慮進行呼叫。

明確:雖然建立子類物件時,呼叫了父類的構造器,但是自始至終就建立過一個物件,即為 new 的子類物件。

Person.java

package com.klvchen.java3;

public class Person { String name; int age; int id = 1001; //身份證 public Person() { System.out.println("我無處不在!"); } public Person(String name) { this.name = name; } public Person(String name, int age) { this.name = name; this.age = age; } public void eat() { System.out.println("人,吃飯"); } public void walk() { System.out.println("人,走路"); } }

Student.java

package com.klvchen.java3;

public class Student extends Person {

    String major;
    int id = 1002;  //學號

    public Student() {

    }

    public Student(String major) {
        this.major = major;
    }
    
    
    public Student(String name, int age, String major) {
        super(name, age);
        this.major = major;
    }

    @Override
    public void eat() {
        System.out.println("學生,多吃有營養的食物");
    }
    
    public void study() {
        System.out.println("學生, 學習知識");
        eat();
        super.eat();
        this.walk();
    }
    
    public void show() {
        System.out.println("name = " + name + ", age = " + age);
        System.out.println("id = " + id);
        System.out.println("id = " + super.id);
    }
}

SuperTest.java

package com.klvchen.java3;

public class SuperTest {
    public static void main(String[] args) {
        
        Student s = new Student();
        s.show();
        
        System.out.println();
        s.study();
        
        Student s1 = new Student("Tom", 21, "IT");
        s1.show();
        
        System.out.println("***********************************");
        Student s2 = new Student();
    }

}

執行結果: