Java super關(guān)鍵字的用法詳解
super關(guān)鍵字作用:在子類內(nèi)部調(diào)用父類對(duì)象
基礎(chǔ)語法:
1.在類的繼承中,當(dāng)子類繼承了父類, 在構(gòu)造子類的時(shí)候,一定要先幫助父類進(jìn)行構(gòu)造;
2. 調(diào)用super()必須寫在子類構(gòu)造方法的第一行,以保證在執(zhí)行任何動(dòng)作前,對(duì)象已經(jīng)完成了初始化,否則編譯不通過。每個(gè)子類構(gòu)造方法的第一條語句,都是隱含地調(diào)用super(),如果父類沒有這種形式的構(gòu)造函數(shù),那么在編譯的時(shí)候就會(huì)報(bào)錯(cuò)。
super關(guān)鍵字的三種用法:
1. super.成員變量
class Person{
public String name; //成員變量
public Person(String name) {
this.name = name;
}
}
class Student extends Person{
String name = "student";
public Student(String name) {
super(name);
}
public void help() {
//調(diào)用父類的成員屬性
System.out.println(name); //student 直接使用,優(yōu)先使用局部變量
System.out.println(super.name); // B 直接使用父類的成員變量
}
}
public class s {
public static void main(String[] args) {
Student p = new Student("B");
p.help();
}
}
2. super.成員方法
class {
public String name;
public Person(String name) {
this.name = name; //Test
}
public void help() {
System.out.println(this.name+"Person");
}
}
class Student extends Person{
String name = "student";
public Student(String name) {
super(name); //Test
}
public void help() {
//調(diào)用父類的成員方法
super.help();
System.out.println(this.name+"Student"); //Student this調(diào)用的式同類中的變量
}
}
public class s {
public static void main(String[] args) {
Student p = new Student("Test");
p.help();
}
}
//Test Person
//student Student
3. super():調(diào)用父類中的構(gòu)造方法
3.1.1 隱式調(diào)用父類無參數(shù)構(gòu)造方法super()
如果父類是無參構(gòu)造,那么子類的構(gòu)造方法會(huì)默認(rèn)隱式的在第一行先調(diào)用父類無參數(shù)構(gòu)造方法,所以super()無需手動(dòng)進(jìn)行調(diào)用;
public class Father{
int id;
public Father(){
System.out.println("父類構(gòu)造方法");
}
}
public class Son extends Father{
public Son(){
//super(); //系統(tǒng)會(huì)默認(rèn)生成,可有可無
System.out.println("子類構(gòu)造方法");
}
}
public class Test{
public static void main(String[] args){
Son s = new Son();
}
}
//print:
//父類構(gòu)造方法
//子類構(gòu)造方法
3.1.2 顯式調(diào)用父類有參數(shù)構(gòu)造方法super(id)
如果父類是含參構(gòu)造,那么此時(shí)因?yàn)楦割愔袥]有無參數(shù)構(gòu)造方法,所以子類繼承父類時(shí)會(huì)報(bào)錯(cuò),這時(shí)就需要我們手動(dòng)的調(diào)用父類的有參構(gòu)造方法super(id);
public class Father{
int id;
public Father(int id){
System.out.println("父類構(gòu)造方法");
}
}
public class Son extends Father{
public Son(int id){
super(id); //手動(dòng)調(diào)用父類的有參構(gòu)造方法
System.out.println("子類構(gòu)造方法");
}
}
public class Test{
public static void main(String[] args){
Son s = new Son(1);
}
}
//print:
//父類構(gòu)造方法
//子類構(gòu)造方法
到此這篇關(guān)于Java super關(guān)鍵字的用法詳解的文章就介紹到這了,更多相關(guān)Java super內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java核心編程之文件隨機(jī)讀寫類RandomAccessFile詳解
這篇文章主要為大家詳細(xì)介紹了Java核心編程之文件隨機(jī)讀寫類RandomAccessFile,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08
SpringBoot創(chuàng)建maven多模塊項(xiàng)目實(shí)戰(zhàn)代碼
本篇文章主要介紹了SpringBoot創(chuàng)建maven多模塊項(xiàng)目實(shí)戰(zhàn)代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-09-09
Spring Cloud Gateway 獲取請(qǐng)求體(Request Body)的多種方法
這篇文章主要介紹了Spring Cloud Gateway 獲取請(qǐng)求體(Request Body)的多種方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01
SpringBoot整合Caffeine實(shí)現(xiàn)本地緩存的實(shí)踐分享
緩存是提升系統(tǒng)性能的一個(gè)不可或缺的工具,通過緩存可以避免大部分重復(fù)的請(qǐng)求到數(shù)據(jù)庫層,減少IO鏈接次數(shù),提升整體的響應(yīng)速率,本地緩存中比較常見的比如 Caffeine 緩存,這篇文章將結(jié)合具體的 Springboot 項(xiàng)目搭配 Caffeine 實(shí)現(xiàn)本地緩存的各種使用方式2024-07-07
基于java實(shí)現(xiàn)簡(jiǎn)單的圖片類別識(shí)別
這篇文章主要為大家詳細(xì)介紹了如何基于java實(shí)現(xiàn)簡(jiǎn)單的圖片類別識(shí)別功能,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-12-12

