java中的super關鍵字 以及構造方法調用時間

####super關鍵字可以理解爲父類的,即調用父類的變量,方法等等。


1、直接引用
和this類似,super直接指向父類,來取得父類中的成員,super.xxx來引用。


2、與父類中的成員變量或方法重名時

class Country {
    String name;
    void value() {
       name = "中國";
    }
}
  
class City extends Country {
    String name;
    void value() {
    name = "深圳";
    super.value();  //調用父類中的方法 給父類中的name賦了值
    System.out.println(name); //輸出深圳
    System.out.println(super.name);  //(調用父類中的成員變量)輸出中國
    }
  
    public static void main(String[] args) {
       City c=new City();
       c.value();
       }
}

(之前有看過很多面試題會有類似的題目 給大家簡單的說明一下上面這個方法的流程)

  • 1.首先City c = new City()創建一個對象c
  • 2.c.value() 調用City中的value()方法name = “深圳” 給city中的成員變量name賦值爲“深圳”
  • 3.super.value()調用Country中的value方法給父類中的name賦值爲“中國” //如果把super.value()給刪掉 不進行賦值 後面輸出父類中的成員變量自然就是null了

3、構造方法中

class Person {

    Person() { 
	   System.out.println("父類 無參構造方法"); 
    }
    
    Person(String name) { 
       System.out.println("父類 帶String參數構造方法 name = " + name); 
    }
    
} 
    
public class Chinese extends Person { 
    Chinese() { 
       super(); // 調用父類中無參構造方法
       System.out.println("子類 無參構造方法"); 
    } 
    
    Chinese(String name) { 
       super(name);// 調用父類中帶有一個String參數的方法
       System.out.println("子類 帶一個String的方法 name = " + name); 
    } 
    
    Chinese(String name, int age) { 
       this(name);// 調用當前類中帶有一個String參數的方法
       System.out.println("子類 帶一個String和一個int的方法 name = " + name + ",age = " + age); 
    } 
    
    public static void main(String[] args) { 
       Chinese cn = new Chinese(); 
       cn = new Chinese("wingzing"); 
       cn = new Chinese("wingzing", 21); 
    } 
}

我瞭解到存在部分大學生甚至工作一兩年的工程師都不太瞭解構造方法什麼時候調用的,所以在這裏簡單的聊兩句

  • 1.Chinese cn = new Chinese()創建一個cn對象,當創建這個對象的時候 會自動去調用Chinese類中的無參構造方法(同理後面的創建對象的時候帶參數,自然是自動調用對應的構造方法)
  • 2.調用Chinese中的無參構造方法後,其中有一個super()這個方法又會去調用其父類的無參構造方法

能不通過ide能完全知道以上兩個程序的運行步驟,基本上就弄懂了super關鍵字的用法。

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