面试题:类的初始化与实例的初始化
当运行main方法的时候,首先会初始化类,由于Son
是继承Father
的,因此会先初始化Father类,然后是Son类
类的初始化
初始化类里面的静态变量、静态代码块,输出:父类(5)(1) 子类(10)(6)
实例的初始化
-
初始化父类的成员变量、代码块、构造器,输出:(9)(3)(2)
-
初始化子类的成员变量、代码块、构造器,输出:(9)(8)(7)
问题:
(1) 上面为什么父类的test()方法不会生效呢?
是由于test()
被子类重写了,当调用test()
的时候,有一个隐式的this()
方法,父类调用的其实是子类的test()
(2) 并不是所有的情况下父类方法都会被重写,比如下面几种情况
final
方法- 静态方法
private
等子类中不可见的方法
(3) 部分执行顺序和位置有关
如果将静态代码块和静态成员变量的位置调换,你会发现结果也会发生变化,同理,将非静态代码块和成员变量的相互调换也会发生变化,会按照从上到下的顺序执行