本帖最后由 会盟天下英豪 于 2015-10-22 22:55 编辑
1.调用子类的print().因为类B继承类A,且类B出现和类A同样的函数,当实例化类B后,调用print()方法,会运行B类函数的内容,即重写,这也是多态在函数中的一种体现形式。2.成员初始化过程,即所有变量在使用前都能得到恰当的初始化。
(1)B a=new B(),在B类对象初始化时,A类的构造函数也会运行,因为B类构造函数默认第一行有一条隐式的语句super(),super()会访问A类的空参数的构造函数。
(2)A类的构造函数调用print(),由于B类已经重写该方法,则调用B类的print(),当创建B类对象是,该对象包含了A类的子对象,即对象a中会有两个数据成员a,一个为A类的,一个为B类的,但主函数并没有实例化A,因为java会对类的每个基本类型数据成员保证都会有一个初始值,而A类数据成员为int型,所以打印结果为0.
(3)当调用完A类构造函数,接下来调用B类构造函数,因为一实例化类B,且显示的初始化了类B对象的数据成员,即int a=20,所以打印结果为20.
|