• <nav id="wkkge"><strong id="wkkge"></strong></nav>
  • <menu id="wkkge"></menu>
  • Java教程
    Java標識符與關鍵字
    Java變量
    Java數據類型
    Java運算符
    Java控制語句
    Java方法
    Java面向對象
    Java對象的創建和使用
    Java封裝
    Java中static和this
    Java繼承
    Java方法覆蓋和多態
    Java super
    Java基礎練習題

    Java super的定義

     

     

    本章節目標:

     

    掌握super都可以用在哪里?理解super在內存方面的存儲位置。掌握怎么通過子類的構造方法調用父類的構造方法。super什么時候可以省略,什么時候不能省略?

     

     

    知識框架:

     

     

     

    super和this可以對比著學習:

     

    this

     

    ● this是一個引用,保存內存地址指向自己。

     

    ● this出現在實例方法中,誰調用這個實例方法,this就代表誰,this代表當前正在執行這個動作的對象。

     

    ● this不能出現在靜態方法中。

     

    ● this大部分情況下可以省略,在方法中區分實例變量和局部變量的時候不能省略。

     

    ●“this(實際參數列表)”出現在構造方法第一行,通過當前的構造方法去調用本類當中其它的構造方法。

     

    super

     

    嚴格來說,super其實并不是一個引用,它只是一個關鍵字,super代表了當前對象中從父類繼承過來的那部分特征。this指向一個獨立的對象,super并不是指向某個“獨立”的對象,假設張大明是父親,張小明是兒子,有這樣一句話:大家都說張小明的眼睛、鼻子和父親的很像。那么也就是說兒子繼承了父親的眼睛和鼻子特征,那么眼睛和鼻子肯定最終還是長在兒子的身上。假設this指向張小明,那么super就代表張小明身上的眼睛和鼻子。換句話說super其實是this的一部分。如下圖所示:張大明和張小明其實是兩個獨立的對象,兩個對象內存方面沒有聯系,super只是代表張小明對象身上的眼睛和鼻子,因為這個是從父類中繼承過來的,在內存方面使用了super關鍵字進行了標記,對于下圖來說“this.眼睛”和“super.眼睛”都是訪問的同一塊內存空間。

     

     

    圖14-1:super內存圖

     

    ● super和this都可以使用在實例方法當中。

     

    ● super不能使用在靜態方法當中,因為super代表了當前對象上的父類型特征,靜態方法中沒有this,肯定也是不能使用super的。

     

    ● super也有這種用法:“super(實際參數列表);”,這種用法是通過當前的構造方法調用父類的構造方法。

     

    接下來,我們來測試一下:

     

    public class SuperTest01 extends Object{
    	//實例方法
    	public void doSome(){
    		System.out.println(this);
    		System.out.println(super);
    	}
    }

     

    編譯報錯了:

     

    圖14-2:this可以單獨輸出,super不能

     

    通過以上的測試,可以看出this是可以單獨使用的引用,但super無法輸出,編譯器提示super要使用必須是“super.xxx”,顯然super并不指向獨立的對象,并不是保存某個對象的內存地址。

     

    再來看另外的一個測試:

     

    public class SuperTest02 extends Object{
    	//靜態方法
    	public static void doSome(){
    		System.out.println(this);
    		System.out.println(super.toString());
    	}
    }

     

    編譯報錯了:

     

    圖14-3:this和super都不能使用在靜態方法中

     

    通過以上的測試,可以看出this和super都是無法使用在靜態方法當中的。

     

    全部教程
  • <nav id="wkkge"><strong id="wkkge"></strong></nav>
  • <menu id="wkkge"></menu>
  • 面对面棋牌游戏