我在做题的时候认为应该应该产生了2个垃圾对象,但是正确答案是4个//是四个
程序中一共new了3个Icelandic的实例,但为什么最终会产生了4个垃圾对象呢?//可以 通过i3 = i1; i1 = i2; i2 = null; i3 = i1;语句得知是四个垃圾对象,包含了父类Horse中的两个
那是不是说在创建Icelandic的实例的同时是不是其父类Horse也被实例化了,因此最后产生了4个垃圾对象呢?//父类确实是被实例化了,抽象类中有默认的构造方法,只要有构造方法的就可以被实例化 通过生成的class文件就可以知道了
如果以上说法成立,那如果父类是抽象类,子类在实例化的时候父类也能被实例化吗?显然不合理。 //抽象类只是不能用new操作符直接实例 接口除外,因为接口中没有默认构造方法
这里还有一个问题,在父类中有一个变量,大家都知道,变量是静态绑定的,那如果子类实例化时父类没有被实例化,那父类的变量绑定到了哪里呢?//参照上面
那如果父类是一个包含了变量的抽象类时父类在子类实例化的时候有没有被实例化呢?
还是说,如果Horse是抽象的,这道题的答案就是“2”呢? |