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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© itisdream 中级黑马   /  2014-6-22 14:08  /  1654 人查看  /  14 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class Fu
{
  Fu()
  {
    super();
    show();
    return;
  }

  void show()
  {
    System.out.println("fu show");
  }
}
class Zi extends Fu
{
  int num = 8;
  Zi()
  {
    super();  
    System.out.println("zi cons run...."+num);
    return;
  }
  void show()
  {
    System.out.println("zi show..."+num);
  }
}
class text
{
public static void main(String[] args)  
{
  Zi z = new Zi();
  z.show();
}
}
这个机制是怎样的啊,fu show 为什么没有打印出来?父类的super( ),是什么意思,调用谁的构造方法?

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

14 个回复

倒序浏览
本帖最后由 寻找人生目标 于 2014-6-22 14:59 编辑
  1. 看错题了         <img src="http://bbs.itheima.com/static/image/smiley/default/sweat.gif" border="0" smilieid="10" alt="">
复制代码
回复 使用道具 举报
本帖最后由 18353666072 于 2014-6-22 15:34 编辑
  1. class Fu
  2. {
  3.   Fu()
  4.   {
  5.     super();
  6.     show();
  7.     return;
  8.   }

  9.   void show()
  10.   {
  11.     System.out.println("fu show");
  12.   }
  13. }
  14. class Zi extends Fu
  15. {
  16.   int num = 8;
  17.   Zi()
  18.   {
  19.     super();  
  20.     System.out.println("zi cons run...."+num);
  21.     return;
  22.   }
  23.   void show()
  24.   {
  25.     System.out.println("zi show..."+num);
  26.   }
  27. }
  28. class text
  29. {
  30. public static void main(String[] args)  
  31. {
  32.   Zi z = new Zi();
  33.   z.show();
  34. }
  35. }
复制代码
第一个问题:这个机制是怎样的啊,fu show 为什么没有打印出来?分析:就是子类调用父类中的一些定义用法;因为子类重写了父类的show方法,重写也叫覆盖,一提覆盖你就是知道什么机制了吧;
          Fu  f = new Zi();  f.show();  他还是用的子类的show,

第二个问题:父类的super( ),是什么意思,调用谁的构造方法?

分析:可以看成父类的爹的对数据的操作,就是看看上一级对数据是否进行了操作,,调用的肯定是上一级的,,,,,

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

回复 使用道具 举报 1 0
挺有趣的问题
你这程序的输出结果应该是
zi show...0
zi cons run....8
zi show...8
因为执行顺序是 成员默认初始化,构造,显示初始化.
  当你子类调用父类构造方法,父类的构造函数调用的show其实是调用的子类的,因为show方法已经被
子类覆盖,根据多态,所以是调用子类的show()方法 , 你想要的那种结果,你把父类的show方法加个private
那么就可以了,私有的方法子类不能覆盖
回复 使用道具 举报
18353666072 发表于 2014-6-22 15:16
第一个问题:这个机制是怎样的啊,fu show 为什么没有打印出来?分析:就是子类调用父类中的一些定义用法; ...

噢,看懂了。谢谢啦。。
回复 使用道具 举报
倪大大 发表于 2014-6-22 15:28
挺有趣的问题
你这程序的输出结果应该是
zi show...0

楼主  这个题应该没有涉及到多态吧  
回复 使用道具 举报
楼主 这个题的答案是什么啊
回复 使用道具 举报
你这个练习题没看懂  可否给解释下
回复 使用道具 举报
倪大大 发表于 2014-6-22 15:28
挺有趣的问题
你这程序的输出结果应该是
zi show...0

你好   楼主  能否帮忙解达下zi show...0是怎么出来的啊
回复 使用道具 举报
1.单针对这个代码的话,我认为fu类 中的super( );不对,不应该有,这个方法是针对父类的构造函数,而fu类代码没有写出继承的父类是什么,我想不会是要调用超类,Object吧
2.第二个问题涉及到了覆盖的知识,是子类覆盖了父类的方法,所以在主函数中子类对象调用子类的方法时,覆盖了父类的相应的方法,所以就只显示了子类方法。

回复 使用道具 举报
我为你着迷 发表于 2014-6-22 19:06
楼主  这个题应该没有涉及到多态吧

这个不是多态 是什么..
回复 使用道具 举报
我为你着迷 发表于 2014-6-22 19:25
你好   楼主  能否帮忙解达下zi show...0是怎么出来的啊

一个类的new的时候 执行顺序是(我只说这个题有的)   先给成员变量默认初始化 比如 int=0;String=null
. 然后子类的构造函数会调用父类的构造函数, 而父类构造函数中的调用的show()函数 是子类的show()函数,
这就是多态的体现,子类已经复写了父类的show()方法.
   所以会输出 zi show...0    因为这时候子类还没有显示初始化  所以num还等于0
回复 使用道具 举报
倪大大 发表于 2014-6-23 15:10
一个类的new的时候 执行顺序是(我只说这个题有的)   先给成员变量默认初始化 比如 int=0;String=null
.  ...

哥们  是毕老师讲的多态成员函数的特点嘛   编译看左边  运行看右边?
回复 使用道具 举报
我为你着迷 发表于 2014-6-23 18:29
哥们  是毕老师讲的多态成员函数的特点嘛   编译看左边  运行看右边?

对啊 就是这样嘛
回复 使用道具 举报
哈哈  知道了  3Q{:3_57:}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马