黑马程序员技术交流社区

标题: 关于先后加载问题 [打印本页]

作者: EARL    时间: 2014-11-30 21:30
标题: 关于先后加载问题
class Fu
{
    int num = 5;
        public Fu()
        {
                show();
                System.out.println("第二次打印:"+num);
        }
    void show()
    {               
            System.out.println(num);          
    }
}
class Zi extends Fu
{
        int num = 3;
        public Zi(){}
    void show()
        {                     
                System.out.println("第一次打印:"+num);                               
        }
}
class TestLX {
public static void main(String[] args)
        {
                Zi f = new Zi();                                    
    }
}
为什么打印结果是
第一次打印:0
第二次打印:5
这是怎么运行的?



作者: relice    时间: 2014-11-30 22:56
  1. class Fu
  2. {
  3.     int num = 5;
  4.         public Fu()
  5.         {
  6.                 show();
  7.                 System.out.println("第二次打印:"+num);
  8.         }
  9.     void show()
  10.     {               
  11.             System.out.println(num);           
  12.     }
  13. }
  14. class Zi extends Fu
  15. {
  16.         int num = 3;
  17.         public Zi()
  18.         {
  19.                 //super(); //隐式语句空参的super(),子类对象初始化时,父类构函也会运行
  20.         }
  21.     void show()
  22.         {                     
  23.                 System.out.println("第一次打印:"+num);                                
  24.         }
  25. }
  26. class Demo
  27. {
  28. public static void main(String[] args)
  29.         {
  30.                 Zi f = new Zi();                                    
  31.             }
  32. }
复制代码

也就是说:建立Zi对象后 Zi的构造函数初始化,接着super()指向父类的Fu空参构造函数
因为空参的构造方法里面是show()方法先所以打印Zi的show,接着打印Fu的空参println语句
作者: EARL    时间: 2014-12-1 00:38
relice 发表于 2014-11-30 22:56
也就是说:建立Zi对象后 Zi的构造函数初始化,接着super()指向父类的Fu空参构造函数
因为空参的构造方法里面 ...

为什么会打印子类的show,而不打印父类的show?




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