欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java中的super關(guān)鍵字_動力節(jié)點(diǎn)Java學(xué)院整理

 更新時(shí)間:2017年04月17日 10:38:27   投稿:mrr  
這篇文章主要介紹了Java中的super關(guān)鍵字的相關(guān)知識,需要的朋友參考下

一、super關(guān)鍵字

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

super關(guān)鍵字測試

package com.bjpowernode.test;
 /**
 * 父類
 * 
 *
 */
 class FatherClass {
  public int value;
  public void f() {
  value=100;
   System.out.println("父類的value屬性值="+value);
  }
 }
 /**
 * 子類ChildClass從父類FatherClass繼承
 *
 *
 */
 class ChildClass extends FatherClass {
  /**
  * 子類除了繼承父類所具有的valu屬性外,自己又另外聲明了一個(gè)value屬性,
  * 也就是說,此時(shí)的子類擁有兩個(gè)value屬性。
  */
  public int value;
  /**
  * 在子類ChildClass里面重寫了從父類繼承下來的f()方法里面的實(shí)現(xiàn),即重寫了f()方法的方法體。
  */
  public void f() {
   super.f();//使用super作為父類對象的引用對象來調(diào)用父類對象里面的f()方法
   value=200;//這個(gè)value是子類自己定義的那個(gè)valu,不是從父類繼承下來的那個(gè)value
   System.out.println("子類的value屬性值="+value);
  System.out.println(value);//打印出來的是子類自定義的那個(gè)value的值,這個(gè)值是200
   /**
   * 打印出來的是父類里面的value值,由于子類在重寫從父類繼承下來的f()方法時(shí),
   * 第一句話“super.f();”是讓父類對象的引用對象調(diào)用父類對象的f()方法,
   * 即相當(dāng)于是這個(gè)父類對象自己調(diào)用f()方法去改變自己的value屬性的值,由0變了100。
   * 所以這里打印出來的value值是100。
   */
   System.out.println(super.value);
  }
 }
 /**
 * 測試類
 * 
 *
 */
 public class TestInherit {
  public static void main(String[] args) {
   ChildClass cc = new ChildClass();
   cc.f();
  }
 }

運(yùn)行結(jié)果:  

 

畫內(nèi)存分析圖了解程序執(zhí)行的整個(gè)過程

  分析任何程序都是從main方法的第一句開始分析的,所以首先分析main方法里面的第一句話:

ChlidClass cc = new ChlidClass();

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

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

接下來執(zhí)行第二句話:

cc.f();

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

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

  方法體內(nèi)的最后三句話都是執(zhí)行打印value值的命令,前兩句打印出來的是子類對象自己的那個(gè)value值,因此打印出來的結(jié)果為200,最后一句話打印的是這個(gè)子類對象里面的父類對象自己的value值,打印出來的結(jié)果為100。
到此,整個(gè)內(nèi)存分析就結(jié)束了,最終內(nèi)存顯示的結(jié)果如上面所示。

以上所述是小編給大家介紹的Java中的super關(guān)鍵字_動力節(jié)點(diǎn)Java學(xué)院整理,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • Java抽象類原理與用法實(shí)例詳解

    Java抽象類原理與用法實(shí)例詳解

    這篇文章主要介紹了Java抽象類原理與用法,結(jié)合實(shí)例形式詳細(xì)分析了Java抽象類相關(guān)概念、原理、定義、使用方法及操作注意事項(xiàng),需要的朋友可以參考下
    2019-11-11
  • Java實(shí)現(xiàn)螺旋矩陣的示例

    Java實(shí)現(xiàn)螺旋矩陣的示例

    這篇文章主要介紹了Java實(shí)現(xiàn)螺旋矩陣的示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • 基于Ant路徑匹配規(guī)則AntPathMatcher的注意事項(xiàng)

    基于Ant路徑匹配規(guī)則AntPathMatcher的注意事項(xiàng)

    這篇文章主要介紹了基于Ant路徑匹配規(guī)則AntPathMatcher的注意事項(xiàng),具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Java面向?qū)ο筮x擇題總結(jié)歸納

    Java面向?qū)ο筮x擇題總結(jié)歸納

    今天小編就為大家分享一篇關(guān)于Java面向?qū)ο筮x擇題總結(jié)歸納,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • 解析maven的用法和幾個(gè)常用的命令(推薦)

    解析maven的用法和幾個(gè)常用的命令(推薦)

    maven最大的作用就是用于對項(xiàng)目中jar包依賴的統(tǒng)一管理。這篇文章主要介紹了maven的用法和幾個(gè)常用的命令,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • 在controller中如何設(shè)置接收參數(shù)的默認(rèn)值

    在controller中如何設(shè)置接收參數(shù)的默認(rèn)值

    這篇文章主要介紹了在controller中如何設(shè)置接收參數(shù)的默認(rèn)值,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • 詳細(xì)聊一聊JavaWeb中的Request和Response

    詳細(xì)聊一聊JavaWeb中的Request和Response

    這篇文章主要給大家介紹了關(guān)于JavaWeb中Request和Response的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2023-02-02
  • IDEA Servlet 模板設(shè)置的方法

    IDEA Servlet 模板設(shè)置的方法

    這篇文章主要介紹了IDEA Servlet 模板設(shè)置的方法,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-04-04
  • java使用鏈表實(shí)現(xiàn)約瑟夫環(huán)

    java使用鏈表實(shí)現(xiàn)約瑟夫環(huán)

    這篇文章主要為大家詳細(xì)介紹了java使用鏈表實(shí)現(xiàn)約瑟夫環(huán),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • SpringBoot測試類注入Bean失敗的原因及分析

    SpringBoot測試類注入Bean失敗的原因及分析

    SpringBoot 2.2版本前后測試類有所變化,2.2版本之后使用JUnit 5,導(dǎo)入注解@SpringBootTest和@Test來自junit.jupiter.api包;而2.2版本之前使用JUnit 4,需要額外導(dǎo)入@RunWith注解來自junit.runner包,無論哪個(gè)版本,都需確保測試類和啟動類的包名一致
    2024-09-09

最新評論