日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

java中super关键字_Java中关键字super与this的区别

發(fā)布時(shí)間:2025/4/16 java 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java中super关键字_Java中关键字super与this的区别 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、super關(guān)鍵字

在JAVA類中使用super來引用父類的成分,用this來引用當(dāng)前對象,如果一個(gè)類從另外一個(gè)類繼承,我們new這個(gè)子類的實(shí)例對象的時(shí)候,這個(gè)子類對象里面會有一個(gè)父類對象。怎么去引用里面的父類對象呢?使用super來引用,this指的是當(dāng)前對象的引用,super是當(dāng)前對象里面的父對象的引用。

class Student {

public int age;

public void std(){ //聲明Student類的方法std()

age = 15;

System.out.println("學(xué)生平均年齡為:"+age);

}

}

class ThisStudent extends Student{

public int age;

public void std(){

super.std(); //使用super作為父類對象的引用對象來調(diào)用父類對象里面的Std()方法

age = 18;

System.out.println("這個(gè)學(xué)生的年齡為:"+age);

System.out.println(super.age); //使用super作為父類對象的引用對象來調(diào)用父類對象中的age值

System.out.println(age);

}

}

public class TestDif {

public static void main(String[] args) {

ThisStudent a = new ThisStudent();

a.std();

}

}

執(zhí)行結(jié)果:

學(xué)生平均年齡為:15

這個(gè)學(xué)生的年齡為:18

15

18

二、上述程序的內(nèi)存分析

ThisStudent a = new ThisStudent();

程序執(zhí)行到這里時(shí),首先在棧空間里面會產(chǎn)生一個(gè)變量a,a里面的值是什么這不好說,總而言之,通過這個(gè)值我們可以找到new出來的ThisStudent對象。由于子類ThisStudent是從父類Student繼承下來的,所以當(dāng)我們new一個(gè)子類對象的時(shí)候,這個(gè)子類對象里面會包含有一個(gè)父類對象,而這個(gè)父類對象擁有他自身的屬性age。這個(gè)age成員變量在Student類里面聲明的時(shí)候并沒有對他進(jìn)行初始化,所以系統(tǒng)默認(rèn)給它初始化為0,成員變量(在類里面聲明)在聲明時(shí)可以不給它初始化,編譯器會自動給這個(gè)成員變量初始化,但局部變量(在方法里面聲明)在聲明時(shí)一定要給它初始化,因?yàn)榫幾g器不會自動給局部變量初始化,任何變量在使用之前必須對它進(jìn)行初始化。

子類在繼承父類age屬性的同時(shí),自己也單獨(dú)定義了一個(gè)age屬性,所以當(dāng)我們new出一個(gè)子類對象的時(shí)候,這個(gè)對象會有兩個(gè)age屬性,一個(gè)是從父類繼承下來的age,另一個(gè)是自己的age。在子類里定義的成員變量age在聲明時(shí)也沒有給它初始化,所以編譯器默認(rèn)給它初始化為0。因此,執(zhí)行完第一句話以后,系統(tǒng)內(nèi)存的布局如下圖所示:

a.std();

當(dāng)new一個(gè)對象出來的時(shí)候,這個(gè)對象會產(chǎn)生一個(gè)this的引用,這個(gè)this引用指向?qū)ο笞陨怼H绻鹡ew出來的對象是一個(gè)子類對象的話,那么這個(gè)子類對象里面還會有一個(gè)super引用,這個(gè)super指向當(dāng)前對象里面的父對象。所以相當(dāng)于程序里面有一個(gè)this,this指向?qū)ο笞约?#xff0c;還有一個(gè)super,super指向當(dāng)前對象里面的父對象。

這里調(diào)用重寫之后的std()方法,方法體內(nèi)的第一句話:“super.std();”是讓這個(gè)子類對象里面的父對象自己調(diào)用自己的f()方法去改變自己age屬性的值,父對象通過指向他的引用super來調(diào)用自己的std()方法,所以執(zhí)行完這一句以后,父對象里面的age的值變成了15。接著執(zhí)行“age=18;”這里的age是子類對象自己聲明的value,不是從父類繼承下來的那個(gè)age。所以這句話執(zhí)行完畢后,子類對象自己本身的age值變成了18。此時(shí)的內(nèi)存布局如下圖所示:

方法體內(nèi)的最后三句話都是執(zhí)行打印age值的命令,前兩句打印出來的是子類對象自己的那個(gè)age值,因此打印出來的結(jié)果為18,最后一句話打印的是這個(gè)子類對象里面的父類對象自己的age值,打印出來的結(jié)果為15。

到此,整個(gè)內(nèi)存分析就結(jié)束了,最終內(nèi)存顯示的結(jié)果如上面所示。

(參考自孤傲蒼狼)

總結(jié)

以上是生活随笔為你收集整理的java中super关键字_Java中关键字super与this的区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。