物件導向基礎 繼承04(隱顯式子類初始化)

2021-10-14 09:27:06 字數 2927 閱讀 5881

接下來重點學習一下兩種方式

隱式初始化,jvm自動呼叫,無需我們手動操作

條件為

達成上述兩個條件,則jvm在初始化子類物件時進行隱式初始化

所有父類的構造方法都執行完畢,開始執行子類構造方法

需要注意的是

顯式初始化,需要程式設計師手動寫**,告訴jvm呼叫哪個父類構造器

如何使用?

什麼是super關鍵字?

this vs super  

this關鍵字:表示當前物件的引用 super關鍵字:super代表父類物件的引用

this呼叫當前類中定義的構造方法:this(實參列表)

super呼叫父類中定義的構造方法:super(實參列表)

this訪問當前物件的成員變數值 super訪問父類物件中,成員變數的值

this訪問當前物件的成員方法 super訪問父類物件,成員方法

super與this關鍵字this關鍵字概念:this代表所在類的物件引用。

記住: 方法被哪個物件呼叫,this就代表哪個物件。

1.super可以在子類中 呼叫父類中名稱相同的 成員方法和成員變數

2.this可以在方法中呼叫 類中的與方法內區域性變數名稱相同 的成員方法和成員變數

3.super和this的區別

(a).this 代表當前類的物件

代表物件的記憶體空間標識(用來儲存當前類定義的內容,成員變數、方法)

(b).super (代表父類物件) 可以這麼理解,實際並不代表父類物件

代表物件的記憶體空間的標識(用來儲存父類定義的內容,成員變數、方法)

使用場景:

當區域性變數和成員變數名字相同時用this,子類變數和父類變數名字相同時用super

super用法:(this和super均適用)

1.訪問成員變數

this.成員變數 super.成員變數 (區域性變數直接呼叫不需要修飾符)

2.訪問構造方法

this(…) super(…) 如果是有參方法,()裡面寫引數

3.訪問成員方法

this.成員方法() super.成員方法()

super和this使用情況記憶體圖

1.main方法入棧,建立乙個son型別變數son,然後在堆上建立son型別物件new son()

2.物件的記憶體空間有兩個標識,this空間儲存子類的成員變數num1=10,num2=20,super空間儲存父類變數num1=1,num2=2;

son呼叫show方法,show()入棧,它的區域性變數為num1=100,num2=200;,呼叫不同的變數需要在變數名前加上識別符號,如super.num1, this.num2

隱式子類物件建立:

​ 條件:

​ a. 當父類提供了預設的建構函式(無參構造方法)

​ b. 子類的構造方法中, 沒有顯式呼叫父類的其它構造方法

​ 結果:

​ jvm自動在子類構造方法第一句加上 「 super() 「

​ 在執行子類的構造方法之前,jvm會自動執行父類

顯式子類物件建立:

​ 程式設計師寫**告訴jvm在呼叫子類構造器之前呼叫父類構造方法

​ 可以在子類構造器的第一行使用super關鍵字,呼叫父類的構造方法

總結:​1,無論是隱式還是顯式,最終都是為了保證父類構造器先於子類執行

​ 2,若父類中不存在預設構造方法,則必須在子類構造方法中使用super關鍵字呼叫父類構造器

​ 3,在子類構造方法中,super語句必須在第一行

​ 4,在子類構造方法中,也可以用this呼叫自身構造,也必須在第一行

​ 5,this和super不能共存

​ 6,構造**塊和靜態**塊也是「先父後子」

為什麼this和super都必須在第一行?

​ 因為子類構造器第一行永遠都有乙個super關鍵字呼叫,如果你自己的super和this不在第一行,會形成迴圈

分析程式:

public

class

demo

}class

person

}class

student

extends

person

public

student

(int svar)

public

student

(int svar, string svarstring)

}class

primarystudent

extends

student

}ends student

}

輸出:

person類的無參構造

student int構造方法

student int string構造方法

primarystudent類的 三參構造

java筆記 初識物件導向04繼承

一,繼承中類的建構函式 在對子類物件進行初始化時,父類的建構函式也會執行,那是因為子類的建構函式預設第一行有一條隱式的語句super super 這會訪問父類中的空引數的建構函式。一些有有用的結論 子類的所有的建構函式,預設都會訪問父類中空引數的建構函式 因為子類每乙個建構函式內的第一行都有一句隱式...

day04物件導向 static 繼承

物件導向最重要的概念是 類和物件。定義類構造器this關鍵字 封裝 靜態成員變數訪問 例項成員變數訪問 靜態方法訪問 例項方法訪問 拓展面試題 1 靜態方法中是否可以直接訪問靜態方法?可以的,都屬於類可以直接訪問的 2 靜態方法中是否可以直接訪問例項方法?不可以的,例項方法屬於物件必須用物件訪問 3...

物件導向基礎 繼承05(子類的屬性隱藏 方法覆蓋)

子父類中能否擁有同名的屬性呢?如果可以,請嘗試 建立子類物件,在父類中,編寫方法,返回該屬性 最終我們發現,子類可以訪問到父類的成員變數 如果我就想在子類方法中,訪問父類的同名成員變數,怎麼辦?物件名點成員變數名的,編譯器檢索機制 注意事項 子父類中能否擁有同名的方法呢?如果可以,請嘗試 再在父子類...