package polymorphism;
class glyph
void draw()
glyph()
}class roundglyph extends glyph
void draw()
}public class polyconstructor
}
結果:static glyph
glyph before draw
roundglyph.radius=0
glyph after draw
roundglyph.roundglyph().radius=5
-----------------
glyph before draw
glyph draw
glyph after draw
結果分析:
我們發現當glyoh的構造器呼叫draw()方法時,radius不是預設的1,而是0。
初始化實際過程如下:
1.在其他任何事情反生之前,講分配給物件的儲存空間初始化成二進位制的零。
2.如前所述那樣呼叫基類構造器,此時,呼叫被覆蓋後的draw()方法,由於步驟1的緣故,我們此時發現radius的值為0。
3.按照宣告的順序呼叫成員的初始化方法。
4.呼叫匯出類的構造主體。
java構造器內部的多型方法
我們知道,動態繫結的呼叫是在執行時才決定的,物件無法知道到底呼叫的是哪個類的方法。當我們在構造器中呼叫動態繫結的方法,就會用到該方法被覆蓋之後的定義。但是這種呼叫的效果難以預計,因為被覆蓋的方法在物件被完全構造之前就會被呼叫。我們先來看看下面這段 class base public void tel...
構造器內部的多型方法
提出問題 已知b類繼承於a類,且b類複寫了a類中公共的非靜態的function 方法。且在a類的構造器中,呼叫function 方法。我們知道,在建立b類例項物件的時候,會呼叫a類的構造器方法。那麼,呼叫的是b類例項物件的function 方法,還是a類例項的function 方法?首先,看乙個例項...
構造器內部的多型方法行為
package com.lu.test import static lu.utils.print.在任何構造器內部,整個物件可能只是部分形成 我們只知道基類物件已經進行初始化。如果構造器只是在構建物件過程中的乙個步驟,並且該物件所屬的類是從這個構造器所屬 的類匯出的,那麼匯出部分在當前構造器正在被呼...