黑马程序员技术交流社区
标题:
构造函数中可以随便调用方法吗?
[打印本页]
作者:
王杰
时间:
2012-3-9 18:41
标题:
构造函数中可以随便调用方法吗?
/*
如果方法的中使用了这个类中的字段,那么这些字段完全有可能还没有初始化。
*/
class X
{
int xmask = 1;
int mask;
X()
{
mask = xmask;
System.out.println("mask="+mask);//1
method();//调用了可以被子类重载的方法,获取的ymask=0;
//ymask尚未完成显示初始化。
}
void method()
{
System.out.println("父类的method方法,xmask="+xmask);
}
}
class Y extends X
{
int ymask = 2;
Y()
{
mask += ymask;
System.out.println("mask="+mask);//3
method();
}
void method()
{
System.out.println("子类的method方法,ymask="+ymask);
}
}
class Demo4
{
public static void main(String[] args)
{
Y test = new Y();
}
}
/*
运行结果:
mask=1
子类的method方法,ymask=0
mask=3
子类的method方法,ymask=2
分析:
子类和父类的构造函数都调用了method方法,
执行的都是子类的method方法,
但是method输出的结果却不一样;
总结:在设计对象构造阶段调用的这些方法必须考虑上面这些因素。
构造函数应该避免调用那些可覆盖的方法,即不是私有的,静态的或final的方法。
如果调用了这些方法,必须在文档中特别说明。
*/
复制代码
作者:
泮和顺
时间:
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