A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 迦罗叶 中级黑马   /  2014-2-27 15:24  /  1387 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 迦罗叶 于 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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

9 个回复

倒序浏览
本帖最后由 我要的幸福呢 于 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 {
复制代码

回复 使用道具 举报
上面不知道为什么显示不全,再发一次

  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. }
复制代码



评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
我要的幸福呢 发表于 2014-2-27 15:51
上面不知道为什么显示不全,再发一次

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

首先感谢   和下面估计还有同样一个疑问
16行        int num = 4;//构造方法执行玩之后才进行初始化
我想请问下  你说的构造方法执行完,是指父类的构造方法吗
回复 使用道具 举报
  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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
乔青山 发表于 2014-2-27 15:56
想问一下这句:
show();//所以这里调用的就是Child对象的show方法,但这里Child对象的num还没有初始化, ...

对不起,我说错了,num是在构造函数之前初始化的
回复 使用道具 举报
迦罗叶 发表于 2014-2-27 16:14
首先感谢   和下面估计还有同样一个疑问
16行        int num = 4;//构造方法执行玩之后才进行初始化
我 ...

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

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

不好意思  我看错了。。答非所问了。。~1 我在这里想问下 为什么调用父类的 show()函数中 num 是0呢  
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马