正文

完整的初始化过程2006-05-29 21:10:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/edwardguo/15182.html

分享到:

今天起,日志开辟专栏,将专业学习的一些知识点记录下来。用BLOG记录似乎更加方便一些,权且当作学习笔记吧。

完整的初始化过程。

例:
class con1{

    public con1()
    {
          System.out.println("1");
    }

}

class con2 extends con1{
     String x="hello";
     public con2()
     {
          System.out.println("2");
          tt();
     }
     public void tt()
     {
          System.out.println("a"+x);
     }
}

class con3 extends con2{
     String x="hi";
     public con3()
     {
          System.out.println("4");
          tt();
     }
     public void tt()
     {
          System.out.println("b"+x);
     }
     public static void main(String args[])
     {
          con2 x = new con3();
          x.tt();
          System.out.println("Last is "+x.x);
          con3 y=(con3) x;
          System.out.println("Last is "+y.x);
     }
}
其执行过程如下。
先执行new con3()。
(1)new con3() 中无this(),那么又执行public con2()。
1)public con2()中也无this(),又执行public con1()。
  1、public con1()中也无this,执行Object的构造器。
  2、显示初始化,无成员变量。
  3、继续向下执行,输出1。
2)显示初始化,执行x="hello";语句。
3)继续向下执行,输出2
执行tt(),因为tt已经被覆盖,因而执行的是子类的tt(),子类中因为x尚未显示初

始化,因而为null,显示bnull。
(2)显示初始化,执行x="hi":语句。
(3)继续向下执行,输出4。
tt()执行被重载的方法,输出x的值为bhi。
(4)继续执行main();
1)x.tt(),执行被重载的方法,输出为bhi。
2)输出x.x,变量无覆盖,显示为父类的Last is hello。
3)将x转化为子类的con3类型。
4)输出y.x,显示为子类的Last is hi。
执行结果为:
1
2
bnull
4
bhi
bhi
Last is hello
Last is hi

阅读(3865) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册