黑马程序员技术交流社区

标题: 构造函数中可以随便调用方法吗? [打印本页]

作者: 王杰    时间: 2012-3-9 18:41
标题: 构造函数中可以随便调用方法吗?
  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. */
复制代码

作者: 泮和顺    时间: 2012-3-9 21:06
太牛了 构造函数还调用其他成员函数没实际意义吧  虽然编译器不给你报错。。。
作者: 马胜平    时间: 2012-3-9 21:11
很正常的事啊{:soso_e127:}
作者: djx900    时间: 2012-3-9 21:13
本帖最后由 djx900 于 2012-3-9 21:14 编辑

牛人  气死妙想




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