麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Java > 正文

解析java中super的用法分析

2019-11-26 16:05:05
字體:
來源:轉載
供稿:網友
昨天寫this用法總結的時候,突然產生了一個問題,請教別人之后,有了自己的一點認識。還是把它寫下來,為大家更好的認識提供一點思路。
1)有人寫了個很好的初始化屬性的構造函數,而你僅僅想要在其中添加另一些自己新建屬性的初始化,這樣在一個構造函數中調用另外一個構造函數,可以避免重復的代碼量,減少工作量;
2)在一個構造函數中調用另外一個構造函數的時候應該用的是同一塊內存空間,在默認的構造函數中先初始化變量,調用另一個的時候覆寫已經初始化的變量的值;
3)整個調用的過程和遞歸調用函數有點類似,不斷充氣球,直到整個氣球膨脹起來,不斷的深層遞進,遇到停止標記,逐層的跳出來。
寫了段代碼,解釋我上面的敘述:
復制代碼 代碼如下:

class JavanTiger {
     int age;      // 年齡
     int hight;    // 身體高度

     public JavanTiger() {
         print();
         this.age=2;   //這里初始化 age 的值 ,但遞歸返回的時候,這個值會被覆寫
     }

     public JavanTiger(int age) {
         this();      // 調用自己的第一個構造函數,下面的兩個語句數不執行的
         this.age = age;
         print();
     }

     public JavanTiger(int age, int hight) {
         this(age);   // 調用自己第二個構造函數  ,下面的兩個語句數不執行的
         this.hight = hight;
         print();
     }

     public void print() {  //打印函數
         System.out.println("I'am a " + age + "歲 " + hight + "尺高 tiger!");
     }
     public static void main(String[] args) {
         new JavanTiger(3,3);
     }
 }
 //output
 //I'am a 0歲 0尺高 tiger!
 //I'am a 3歲 0尺高 tiger!
 //I'am a 3歲 3尺高 tiger!

個人理解就是這樣了,可能里面還有問題,比如構造函數遞歸調用和程序函數遞歸調用的機制是否似乎相同的?構造函數同對象一起產生,也就是同時會分配內存空間出來,那門這樣的遞歸調用會不會打亂分配內存的順序?希望看到的大牛們拍板,給個最好的解釋。
今天要總結的是 super 這個關鍵字的使用,super 在構造函數中出現的時候一般是當前這個類繼承了其他的類,super 的出現就是為了調用父類的構造函數,貼段代碼先
復制代碼 代碼如下:

class Tiger {
     int age; // 年齡
     int hight; // 身體高度

     public Tiger() {
         print();
     }

     public void print() {
         System.out.println("I'am a " + age + "歲 " + hight + "尺高 tiger!");
     }
 }
 public class JavanTiger extends Tiger {   
     public JavanTiger() {
         super();    // 調用父類無參數的構造函數
     }
     public static void main(String[] args) {
         new JavanTiger();
     }
 }

其實在類JavanTiger 中的構造函數中的 super()可以不寫,JAVA會默認調用父類的無參數的構造函數,但如果父類沒有定義無參數的構造函數,沒有語法錯誤,程序會自動退出,沒有任何打印語句,這時候你需要手動調用其他父類的構造函數,貼段代碼:
復制代碼 代碼如下:

class Tiger {
     int age; // 年齡
     int hight; // 身體高度

     public Tiger(int age) {
     this.age = age;
     print();
     }
     public void print() {
         System.out.println("I'am a " + age + "歲 " + hight + "尺高 tiger!");
     }
 }
 public class JavanTiger extends Tiger {   
     public JavanTiger() {
         super(1);    // 調用父類有參數的構造函數
     }
     public static void main(String[] args) {
         new JavanTiger();
     }
 }

這段代碼中的 super(1)必須要寫進去,否則編譯器會報錯。所以我簡單的總結了一下,“this()是調用自己其他的構造函數,super()是調用自己繼承的父類的構造函數“,如果只想調用默認無參數的父類構造函數,不用在子類的構造函數當中寫出來,但是實際編程的時候,總是會忽略這一點。
那門這兩個關鍵字能不能同時出現在子類的一個構造函數當中納?答案肯定是不能。先說下自己的理解:
1)在新建一個基類的時候,不論遞歸調用幾次自身的構造函數,最終你都會去調用父類的構造函數,(不是顯式調用的話,系統會調用默認無參數的父類構造函數);
2)JAVA 中規定使用 this 和 super 時必須放在構造函數第一行,只有一個第一行;
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: a网在线 | 久久国产精品久久久久久电车 | xnxx 日本免费| 韩国精品一区二区三区四区五区 | 国产午夜亚洲精品 | 日韩精品 | 九九热在线精品视频 | 92看片淫黄大片欧美看国产片 | 可以免费看av | 久久久久久久久久久国产精品 | 国产午夜精品理论片a级探花 | xxxeexxx性国产 | 国产99久久久久久免费看 | 久久艹综合 | 国产精品久久久毛片 | 国产成人在线看 | 欧美特级一级毛片 | 久久久一区二区三区精品 | 久久亚洲精品久久国产一区二区 | 精品一区二区三区毛片 | 毛片网站视频 | 国产69精品久久99不卡免费版 | 91成人久久| 在线视频a| 99精品国产在热久久婷婷 | 毛片免费视频观看 | 国产精品.com | 色视频在线播放 | 国产精选电影免费在线观看 | 黄污网站在线观看 | 高清国产午夜精品久久久久久 | 久久精品色 | 日韩视频一二区 | 欧美精品国产综合久久 | 草碰人人 | 国产精品久久久久久久久久了 | 国产一区二区在线免费观看 | av不卡免费在线 | wankz100%videos| 欧美a区| 久久久99精品视频 |