当一个类产生一个对象时,它会先去找相应的构造函数对这个对象初始化,也就是会先运行一次构造函数,并且当存在继承关系时,会先运行父类中相应的构造函数.因为子类的构造函数的第一行有一个隐藏的语句:super().这就是会出现Fu show Zi show 的原因.当它只是成员函数时,它不用运行构造函数,所以没有输了语句被调用.补充:对于你说是成员函数时这句话不是很理解,当一个类里的某个函数与类名相同,这个函数就是构造函数了.
[ 本帖最后由 杜桂发 于 2011-09-15 16:06 编辑 ]
你要新建一个对象,就必须要用到构造方法,即使你没有构造,也要调用默认构造方法,如果有继承,则先运行父类构造方法,再运行子类构造方法,既然是继承,当然得先有父类,再有子类了,对吧!会显示Fu show Zi show 是因为你写的构造方法里面有这个语句,如果你没有定义构造方法,这时候系统会调用默认构造方法,默认构造方法没有打印语句,当然什么都没打印咯。
理解这个问题,楼主首先要理解构造函数的概念。
构造函数是一种特殊的成员方法,其方法名和类名相同。它的特点是:
(1)构造方法没有返回值,前面不能有返回类型,也不能有void。
(2)程序中不能直接调用构造方法。构造方法是当new运算符实例化一个对象时,系统自动调用的。
(3)构造方法一般用于成员变量的初始化。
而在子类生成一个实例对象时,会自动调用父类的构造方法,
故[code] Zi z=new Zi(); [/code]运行的结果为Fu show Zi show ,而如果相应的输出语句放在成员方法中,程序产生一个类的对象时调用的构造函数不执行任何操作,同时它也不会自动调用成员方法,故不输出任何内容。