構造器內部的多型方法的行為

2021-07-30 12:36:26 字數 444 閱讀 3064

下圖為tkj p163的程式,看書的時候一直不怎麼理解他的執行結果。自己一步步debugger得到結果。

在程式開始執行的時候,由於roundglyph是glyph的子類,他會在構造器中首先呼叫父類的構造器,也就是進入到glyph的構造器方法中。在glyph中也有draw方法,並且在構造方法中呼叫了。但是可以通過debug看出這個時候的呼叫draw()物件(即this)是roundglyph。於是會動態繫結到roundglyph的draw()方法中,而且他將roundglyph初始化,由於是父類的構造器,故引數5未有傳入。直接將成員初始化為預設值0,所以執行結果為:

構造器內部的多型方法行為

package com.lu.test import static lu.utils.print.在任何構造器內部,整個物件可能只是部分形成 我們只知道基類物件已經進行初始化。如果構造器只是在構建物件過程中的乙個步驟,並且該物件所屬的類是從這個構造器所屬 的類匯出的,那麼匯出部分在當前構造器正在被呼...

構造器內部多型方法的行為

如果在超類的構建器中呼叫了子類覆蓋過的方法,則編譯器缺省會呼叫在超類構建的過程中呼叫已經被子類覆蓋過的方法,而不是超類中的原始方法。這種錯誤很難從邏輯上進行排查,所以一定要格外小心!以下是例子 class glyph glyph class roundglyph extends glyph void...

構造器內部的多型方法的行為

public class livingcreature void draw public class animal extends livingcreature override void draw public static void main string args 結果 before draw...