问:请问语句System.out.println("-----------Spring加载完成"); 加载完成之前(执行之前),Person和Teacher对象就已经被创建好了吗? //答:已经创建好了, 通过控制台可以看出 ----------Person()无参构造器--------- -----Teacher()无参构造器------- -----------Spring加载完成 前面两个加载最快,所以是已经创建完成
将Spring的代码注释掉 新建一个Teacher对象,问:输出结果是什么? 答:输出结果应该为 问:这里不是只实例化了一个Teacher对象吗,应该只输出----Teacher()无参构造器----才对,为什么还输出了—Person()无参构造器—语句呢?
答:当你实例化一个字类时,他会先实例化所有父类的无参构造器,就是说在实例化Teacher时,他会先实例化父类Person()中的无参构造器,所以会先输出----person()----;
所有的代码都不改变,只改变Person()中的代码 请问,这样执行语句会报错吗 答:会报错
原因:我们在Teacher中写的是无参方法,那么我们在TestBean01中new的也是无参方法,但是在Teacher中我们继承了Person。实例化任何一个子类,他必须将所有父类的无参构造器初始化一遍,也就是说Teacher不会直接的打印【-----Teacher()无参构造器】,他会先到Person中执行一遍Person中的无参构造器。但是由于我们将Person中的无参构造器注释掉了,而且在Person中构造了一个有参的构造器 在一个类中,如果没有任何手动创建的构造器,默认系统会产生一个无参构造器,但是手动创建一个有参的构造器会覆盖掉默认的无参构造器,这里的无参构造器就不存在了,所以就报错了最后通过以上案例可以看出 Spring中 的作用就是new了一个对象,构造器的作用就是构造对象,构造实例
|