Posted on 2007-04-13 09:08
tanzek 閱讀(283)
評論(1) 編輯 收藏 所屬分類:
技術學習
[問題引出]:
public class Parent
{
public void test()
{}
public Parent()
{
test();
}
public static void main(String [] args)
{
new Child();
}
}
class Child extends Parent
{
private int instanceValue = 20;
public void test()
{
System.out.println("instance value is: " + instanceValue);
}
}
執(zhí)行Parent的main結果是什么,并說出理由
[回復]:
我試著分析下哦:
很顯然,程序是從Main開始執(zhí)行的,不過執(zhí)行之前肯定是裝載了Parent類的.
當執(zhí)行new Child();語句時,肯定也會去裝載Child類(記住,這是只是裝載,裝載的同時會完成類的靜態(tài)成員的初始化工作).這里是請求創(chuàng)建Child的實例,因為Child是Parent的子類,那么肯定是要去先去創(chuàng)建Parent的一個實例的,那么在這個過程中,就會執(zhí)行了Child的覆蓋方法test(),這時,子類中的instanceValue還沒有被賦值.因為這時候還沒有進行Child的實例創(chuàng)建.
看一下我加入一些狀態(tài)的程序和執(zhí)行結果哦.
程序清單:
public class Parent
{
public void test() {
System.out.println("In Parent Class.");
}
public Parent() {
System.out.println("In Parent Constructor");
test();
}
public static void main(String [] args) {
System.out.println("In Main Function.");
new Child();
}
}
class Child extends Parent {
private int instanceValue = 20;
public void test() {
System.out.println("In Child Class.");
System.out.println("instance value is: " + this.instanceValue);
}
public Child() {
System.out.println("In Child Constructor.");
}
}
執(zhí)行結果(主要是看執(zhí)行順序哦):
In Main Function.
In Parent Constructor
In Child Class.
instance value is: 0
In Child Constructor.
嘿嘿,應該懂了吧!~ 你可以試著把instanceValue的修飾符改為static試試哦.