java 中的 super
super
??? super是啥? 我第一次看見這個詞首先想到的是superman~~ 超人. superstar. 超級巨星. 翻譯過來就是”超”. 所謂超人. 就是比人牛B那么一點點的人. 表示高一級.
那么到了程序里. 這個鬼東西是干嘛的? 原來我們講過一個詞叫this. this的作用是區(qū)分成員變量和局部變量. 對吧.
this.name = name
Ok, super的作用和this差不多. 它是區(qū)分當(dāng)前類和父類中重名的問題.
調(diào)用父類中重名的內(nèi)容
寫個Programmer
package com.lewen.day18;public class Programmer {public String name = "程序員";}寫個 Front,此時在Front里就會有兩個name. 默認用的是孫悟空的, 但是我想用hero的, 怎么辦. 用super
package com.lewen.day18;public class Front extends Programmer {public String name = "前端";public void skill() {System.out.println(this.name);System.out.println(super.name);}}測試
package com.lewen.day18;public class Test {public static void main(String[] args) {Front fr = new Front();fr.skill();} }OK. 我們對super有了一個初步的認識. 說白了就是找父類中的東西.
調(diào)用父類的構(gòu)造方法
接下來. 我們給父類設(shè)置一個構(gòu)造方法.
package com.lewen.day18;public class Programmer {public String name = "程序員";public Programmer(String name) {this.name = name;} }Front里報錯了….
為什么呢? 這就涉及到一個創(chuàng)建對象的過程
在執(zhí)行new的時候. 整個java就開始動起來, 先加載父類. 沒有父類就沒有子類. 對吧, 所以先加載父類, 然后加載子類. 然后. 會先執(zhí)行父類的構(gòu)造方法, 創(chuàng)建一個父類的對象 然后才是子類的構(gòu)造方法. 這樣一個對象才被創(chuàng)建出來.
package com.lewen.day18;public class Programmer {public String name = "程序員";public Programmer(){System.out.println("父類的構(gòu)造方法");}}package com.lewen.day18;public class Front extends Programmer {public String name = "前端";public Front() {System.out.println("子類的構(gòu)造方法");}}package com.lewen.day18;public class Test {public static void main(String[] args) {Front fr = new Front();} }打印結(jié)果
父類的構(gòu)造
子類的構(gòu)造
??? 那為什么前面我們不寫父類的構(gòu)造的時候, 程序就不報錯呢? 我們說過, java會自動送給每一個類一個構(gòu)造方法, 注意, 這個構(gòu)造方法是空的. 沒有參數(shù)的. 所以, 前面的一切調(diào)用都是自動的.
但是, 此時我們給出了父類的構(gòu)造方法. 那在創(chuàng)建父類對象的時候就必須要調(diào)用父類的構(gòu)造方法. 但是父類中沒有無參數(shù)的構(gòu)造方法. 這樣就必須由程序員手動去調(diào)用父類中的構(gòu)造方法. 記住,. 這個是必須的.
package com.lewen.day18;public class Programmer {public String name = "程序員";public Programmer(String name) {this.name = name;}}package com.lewen.day18;public class Front extends Programmer {public String name = "前端";public void skill() {System.out.println(this.name);System.out.println(super.name);}public Front() {super("調(diào)用父類程序員"); // 必須手動調(diào)用父類中的構(gòu)造方法, super()必須寫在第一行 // System.out.println("子類的構(gòu)造方法");}}package com.lewen.day18;public class Test {public static void main(String[] args) {Front fr = new Front();fr.skill();} }輸出:前端調(diào)用父類程序員
切記, 父類如果沒有無參數(shù)的構(gòu)造. 子類必須手動使用super調(diào)用父類的構(gòu)造方法. 來完成父類對象的創(chuàng)建.
super:
調(diào)用父類中重名的內(nèi)容
調(diào)用父類的構(gòu)造方法
總結(jié)
以上是生活随笔為你收集整理的java 中的 super的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: getter和setter
- 下一篇: 多态应用