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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王杰 黑马帝   /  2012-3-9 18:41  /  2002 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. /*
  2. 如果方法的中使用了这个类中的字段,那么这些字段完全有可能还没有初始化。
  3. */
  4. class X
  5. {
  6.         int xmask = 1;
  7.         int mask;
  8.         X()
  9.         {
  10.                 mask = xmask;
  11.                 System.out.println("mask="+mask);//1
  12.                 method();//调用了可以被子类重载的方法,获取的ymask=0;
  13.                                 //ymask尚未完成显示初始化。
  14.         }

  15.         void method()
  16.         {
  17.                 System.out.println("父类的method方法,xmask="+xmask);
  18.         }
  19. }
  20. class Y extends X
  21. {
  22.         int ymask = 2;
  23.         Y()
  24.         {
  25.                 mask += ymask;
  26.                 System.out.println("mask="+mask);//3
  27.                 method();
  28.         }
  29.         void method()
  30.         {
  31.                 System.out.println("子类的method方法,ymask="+ymask);
  32.         }
  33. }
  34. class Demo4
  35. {
  36.         public static void main(String[] args)
  37.         {
  38.                 Y test = new Y();
  39.         }
  40. }
  41. /*
  42. 运行结果:
  43. mask=1
  44. 子类的method方法,ymask=0
  45. mask=3
  46. 子类的method方法,ymask=2

  47. 分析:
  48. 子类和父类的构造函数都调用了method方法,
  49. 执行的都是子类的method方法,
  50. 但是method输出的结果却不一样;

  51. 总结:在设计对象构造阶段调用的这些方法必须考虑上面这些因素。
  52. 构造函数应该避免调用那些可覆盖的方法,即不是私有的,静态的或final的方法。
  53. 如果调用了这些方法,必须在文档中特别说明。
  54. */
复制代码

评分

参与人数 1技术分 +2 收起 理由
admin + 2 赞一个!

查看全部评分

3 个回复

正序浏览
本帖最后由 djx900 于 2012-3-9 21:14 编辑

牛人  气死妙想
回复 使用道具 举报
很正常的事啊{:soso_e127:}
回复 使用道具 举报
太牛了 构造函数还调用其他成员函数没实际意义吧  虽然编译器不给你报错。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马