package thinking; import static java.lang.System.out; /** * @USER echo * @TIME 2017-07-23 16:58 * @DESC 構造器內部的多態方法的行爲 **/ class Glyph { void draw() { out.println("Glyph.draw()"); } Glyph() { out.println("Glyph() before draw()"); draw(); out.println("Glyph() after draw()"); } } class RoundGlyph extends Glyph { private int redis = 2; RoundGlyph(int r) { redis = r; out.println("RoundGlyph.RoundGlyph().redis = " + redis); } void draw() { out.println("RoundGlyph.draw().redis = " + redis); } } /** * 初始化的實際過程是: * * 1.在其餘任何事物發生以前,將分配給對象的存儲空間初始化成二進制的零 * 2.如前所述那樣調用基類構造器。此時,調用被覆蓋後的draw()方法(要在調用RoundGlyph構造器以前調用), * 因爲步驟1的緣故,咱們此時會發現redius的值爲0 * 3.按照聲明的順序調用成員的初始化方法。 */ public class PolyConstructors { /** * Glyph() before draw() * RoundGlyph.draw().redis = 0 * Glyph() after draw() * RoundGlyph.RoundGlyph().redis = 5 * */ public static void main(String[] args) { new RoundGlyph(5); } }