发布网友
共1个回答
热心网友
因为在 创建 A 的实例前,需要先 创建它的父类 B的实例,
创建B的实例时,会执行 m() 因为该方法被 A 覆盖了,所以会执行 A 的 m() 方法:System.out.println("i is "+ i); 但此时 A 的初始化并没有结束,此时 i 值为它的默认值0 。
而 J 因为是静态变量,在把 A 类加载到虚拟机的时候(在生成这个对象之前)就可以得到初始值 4 了。