黑马程序员技术交流社区

标题: 求大神解答!这些程序之间到底什么关系 [打印本页]

作者: 大大老伴要跪IT    时间: 2014-1-13 21:22
标题: 求大神解答!这些程序之间到底什么关系
  1. class X {
  2.         Y b = new Y();
  3.         X() {
  4.                         System.out.print("X");
  5.         }
  6. }

  7. class Y {
  8.         Y() {
  9.                         System.out.print("Y");
  10.         }
  11. }

  12. public class Z extends X {
  13.         Y y = new Y();
  14.         Z() {
  15.                         System.out.print("Z");
  16.         }

  17.         public static void main(String[] args) {
  18.                         new Z();
  19.         }
  20. }
复制代码

输出结果是什么?求详细的解答过程。
作者: 淡夜清风    时间: 2014-1-13 21:45
输出结果:YXYZ
new Z();先找到Z的构造函数,又看Z继承自X,所以在初始化X之前应该先调用X默认构造函数。
而又发现X类中有一个内嵌对象y。所以又先要初始化内嵌对象y,调用Y类的构造函数。先输出Y。然后再回到X的构造函数输出X。X类的构造函数执行完后,再回到Z的构造函数。而又发现Z类中又有一个内嵌对象y。所以还要先初始化内嵌对象y,调用Y类的构造函数。再次输出Y。然后再返回执行Z的构造函数最后输出Z
(注意一点:如果一个类中有内嵌对象的初始化,要先对内嵌对象的初始化,再对本类的对象初始化)
作者: 孤独的天奇    时间: 2014-1-13 23:04
输出结果是:YXYZ,子类的构造函数第一句都有有一句隐式的super()。剩下的就好理解了
作者: ↑↓ME→←    时间: 2014-1-13 23:28
这个可以使用eclipse在main主程序内设置一个断电,查看一下程序流程!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2