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

2021-09-25 11:18:10 字數 653 閱讀 9682

public class livingcreature 

void draw()

}

public class animal extends livingcreature 

@override

void draw()

public static void main(string args)

}

結果

before draw()

animal() draw radius=0

after draw()

animal() radius=5

before draw()

draw()

after draw()

animal() draw radius=5

draw()

說實話和我預期是不一樣的,但是為啥會出現這種情況呢?涉及到方法的動態繫結(編譯好的是符號引用),具體是依賴於你初始化的物件是匯出類還是基類的。

不過話說回來,正常的構造器是不會這樣寫的,構造器就是給物件初始化用的,但是不排除一些特殊情況,比如你初始化幾個特別屬性單獨寫了個方法給構造器呼叫,但是這個方法不應該被設計為可繼承。

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

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

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

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

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

下圖為tkj p163的程式,看書的時候一直不怎麼理解他的執行結果。自己一步步debugger得到結果。在程式開始執行的時候,由於roundglyph是glyph的子類,他會在構造器中首先呼叫父類的構造器,也就是進入到glyph的構造器方法中。在glyph中也有draw方法,並且在構造方法中呼叫了。...