網上這類的文章多了,也就歸納了一下:
初始化按串行順序如下:
……
超類靜態成員變量
超類靜態塊
子類靜態成員變量
子類靜態塊
……
……
超類成員變量分配引用并默認初始化
子類成員變量分配引用并默認初始化
……
……
超類成員變量用顯式初始化值賦值
超類構造器
子類成員變量用顯式初始化值賦值
子類構造器
……
……
另外,這樣的初始化順序中,如果子類繼承了超類的a方法并在其中修改了子類自己的成員變量,而a方法在超類的構造函數中被調用,那么這個修改的值將被“子類成員變量用顯式初始化值賦值”這一過程重新覆蓋而導致修改失效。
我是這樣理解的,大家給點意見。
初始化按串行順序如下:
……
超類靜態成員變量
超類靜態塊
子類靜態成員變量
子類靜態塊
……
……
超類成員變量分配引用并默認初始化
子類成員變量分配引用并默認初始化
……
……
超類成員變量用顯式初始化值賦值
超類構造器
子類成員變量用顯式初始化值賦值
子類構造器
……
……
另外,這樣的初始化順序中,如果子類繼承了超類的a方法并在其中修改了子類自己的成員變量,而a方法在超類的構造函數中被調用,那么這個修改的值將被“子類成員變量用顯式初始化值賦值”這一過程重新覆蓋而導致修改失效。
我是這樣理解的,大家給點意見。