黑马程序员技术交流社区

标题: 对于输出的结果不是很理解 [打印本页]

作者: 迦罗叶    时间: 2014-2-27 15:24
标题: 对于输出的结果不是很理解
本帖最后由 迦罗叶 于 2014-2-27 18:29 编辑
  1. class Demo1 {
  2.         public static void main(String[] args) {
  3.                 Child c = new Child();
  4.         }
  5. }
  6. class Parent {
  7.         Parent() {
  8.                 show();
  9.         }
  10.         void show() {
  11.                 System.out.println("parent show");
  12.         }
  13. }
  14. class Child extends Parent {
  15.         int num = 4;
  16.         Child() {
  17.                 super();
  18.                 show();
  19.         }
  20.         void show() {
  21.                 System.out.println("child show........." + num);
  22.         }
  23. }
复制代码


作者: 我要的幸福呢    时间: 2014-2-27 15:45
本帖最后由 我要的幸福呢 于 2014-2-27 15:47 编辑
  1. class Demo1{
  2.     public static void main(String[] args) {
  3.             Child c = new Child();
  4.     }
  5. }
  6. class Parent {
复制代码


作者: 我要的幸福呢    时间: 2014-2-27 15:51
上面不知道为什么显示不全,再发一次

  1. class Demo1 {
  2.     public static void main(String[] args) {
  3.             Child c = new Child();
  4.     }
  5. }
  6. class Parent {
  7.     Parent() {
  8.                     System.out.println(this);//这类加上这条输出语句,可以看到打印结果为Child对象
  9.             show();//所以这里调用的就是Child对象的show方法,但这里Child对象的num还没有初始化,值为默认值0
  10.     }
  11.     void show() {
  12.             System.out.println("parent show");
  13.     }
  14. }
  15. class Child extends Parent {
  16.     int num = 4;//构造方法执行完之后才进行初始化
  17.     Child() {
  18.             super();
  19.             show();
  20.     }
  21.     void show() {
  22.             System.out.println("child show........." + num);
  23.     }
  24. }
复制代码




作者: 乔青山    时间: 2014-2-27 15:56
我要的幸福呢 发表于 2014-2-27 15:51
上面不知道为什么显示不全,再发一次

想问一下这句:
show();//所以这里调用的就是Child对象的show方法,但这里Child对象的num还没有初始化,值为默认值0
为什么父类调用子类的方法的时候,子类中的成员变量还没有初始化?
作者: 迦罗叶    时间: 2014-2-27 16:14
我要的幸福呢 发表于 2014-2-27 15:51
上面不知道为什么显示不全,再发一次

首先感谢   和下面估计还有同样一个疑问
16行        int num = 4;//构造方法执行玩之后才进行初始化
我想请问下  你说的构造方法执行完,是指父类的构造方法吗

作者: yekong262    时间: 2014-2-27 16:31
  1. class Demo1 {
  2.         public static void main(String[] args) {
  3.                 Child c = new Child();
  4.         }
  5. }
  6. class Parent {
  7.         Parent() {
  8.                 show();
  9.         }
  10.         void show() {
  11.                 System.out.println("parent show");
  12.         }
  13. }
  14. class Child extends Parent {
  15.         int num = 4;
  16.         Child() {
  17.                 super();//这里调用父类中的构造函数 开始执行show方法  执行的内容是子类的show方法
  18.                                                 //这里涉及一般函数的子父类的覆盖
  19.                                                 /*一般函数 子父类中同名函数的覆盖*/
  20.                 show();
  21.         }
  22.         void show() {
  23.                 System.out.println("child show........." + num);
  24.         }
  25. }
复制代码

作者: 我要的幸福呢    时间: 2014-2-27 16:35
乔青山 发表于 2014-2-27 15:56
想问一下这句:
show();//所以这里调用的就是Child对象的show方法,但这里Child对象的num还没有初始化, ...

对不起,我说错了,num是在构造函数之前初始化的
作者: 我要的幸福呢    时间: 2014-2-27 16:45
迦罗叶 发表于 2014-2-27 16:14
首先感谢   和下面估计还有同样一个疑问
16行        int num = 4;//构造方法执行玩之后才进行初始化
我 ...

我开始回答的有点自以为是了,又看了一下毕老师的视频(第6天第7个),成员变量是在构造函数之前已经进行显示初始化了。上面并没有提及在父类的构造方法中访问子类的成员变量时怎么样的。但我想应该是因为父类无法访问子类的成员变量,所以才输出0。
作者: 我要的幸福呢    时间: 2014-2-27 16:46
迦罗叶 发表于 2014-2-27 16:14
首先感谢   和下面估计还有同样一个疑问
16行        int num = 4;//构造方法执行玩之后才进行初始化
我 ...

我本来是指子类的构造方法,但我错了
作者: yekong262    时间: 2014-2-27 18:32
迦罗叶 发表于 2014-2-27 16:14
首先感谢   和下面估计还有同样一个疑问
16行        int num = 4;//构造方法执行玩之后才进行初始化
我 ...

不好意思  我看错了。。答非所问了。。~1 我在这里想问下 为什么调用父类的 show()函数中 num 是0呢  




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