一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java中的super關鍵字_動力節點Java學院整理

Java中的super關鍵字_動力節點Java學院整理

2020-09-12 15:44動力節點 Java教程

這篇文章主要介紹了Java中的super關鍵字的相關知識,需要的朋友參考下

一、super關鍵字

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

super關鍵字測試

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
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屬性外,自己又另外聲明了一個value屬性,
  * 也就是說,此時的子類擁有兩個value屬性。
  */
  public int value;
  /**
  * 在子類ChildClass里面重寫了從父類繼承下來的f()方法里面的實現,即重寫了f()方法的方法體。
  */
  public void f() {
   super.f();//使用super作為父類對象的引用對象來調用父類對象里面的f()方法
   value=200;//這個value是子類自己定義的那個valu,不是從父類繼承下來的那個value
   System.out.println("子類的value屬性值="+value);
  System.out.println(value);//打印出來的是子類自定義的那個value的值,這個值是200
   /**
   * 打印出來的是父類里面的value值,由于子類在重寫從父類繼承下來的f()方法時,
   * 第一句話“super.f();”是讓父類對象的引用對象調用父類對象的f()方法,
   * 即相當于是這個父類對象自己調用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();
  }
 }

運行結果:  

Java中的super關鍵字_動力節點Java學院整理

畫內存分析圖了解程序執行的整個過程

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

?
1
ChlidClass cc = new ChlidClass();

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

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

Java中的super關鍵字_動力節點Java學院整理

接下來執行第二句話:

?
1
cc.f();

  當new一個對象出來的時候,這個對象會產生一個this的引用,這個this引用指向對象自身。如果new出來的對象是一個子類對象的話,那么這個子類對象里面還會有一個super引用,這個super指向當前對象里面的父對象。所以相當于程序里面有一個this,this指向對象自己,還有一個super,super指向當前對象里面的父對象。

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

Java中的super關鍵字_動力節點Java學院整理

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

以上所述是小編給大家介紹的Java中的super關鍵字_動力節點Java學院整理,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網站的支持!

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 精品福利视频一区二区三区 | 国产欧美日韩专区毛茸茸 | 日日射视频| 日本人妖网站 | 亚洲国产中文字幕在线视频综合 | 公翁的舌尖研磨她的花蒂小说 | 午夜伦理电影在线观免费 | 好奇害死猫在线观看 | 成人啪啪漫画羞羞漫画www网站 | 荡女淫春2未删减版 | 精品国产国产精2020久久日 | 女攻双性| 农村妇女野战bbxxx | 免费大片a一级一级 | 暖暖影院日本版 | 久久精品AV一区二区无码 | 西西人体大胆啪啪私拍色约约 | 国产欧美日韩在线不卡第一页 | 午夜熟女插插XX免费视频 | avtt天堂在线 | 热穴高校| 色先锋影音先锋 | 插入粉嫩| 精品无人区一区二区三区 | 男人j桶进女人p桶爽 | tube99大学生| a一级毛片录像带 录像片 | les女同h高h喷水 | 国产精品久久久久久久久久久威 | 成年男女免费大片在线观看 | 女海盗斯蒂内塔的复仇2免费观看 | 韩国靠逼 | 香蕉精品国产高清自在自线 | h玉足嫩脚嗯啊白丝 | 国产在线看片网站 | 性夜夜春夜夜爽AA片A | 国产成人在线综合 | 国产精品免费久久久久影院小说 | 亚洲国产99999在线精品一区 | 高清一区高清二区视频 | 国产成人成人一区二区 |