3

考虑这些类:

public class Animal{

}

public class Dog extends Animal{

}

public AnimalTest(){
    public static void main(String[] args){
       Dog d = new Dog();
       Animal a = d;
   }
}

我的问题是,因为我执行了向上转换,Animal a = d;它是否会消耗机器上的新内存分配,或者它是否使用分配给Dog d = new Dog();

4

3 回答 3

2

实际对象或其内存占用不受影响。只是创建了一个对该对象的新引用。唯一的区别是引用a只能调用超类 Animal 中可用的方法或访问属性。

于 2014-01-27T07:01:11.623 回答
0

动物 a = d;

a只是一个引用,引用的内存是在方法堆栈(或 jvm 堆栈,而不是堆)中分配的。

也就是说,当调用该方法时main,JVM 将分配一个包含引用空间的堆栈。

于 2014-01-27T06:59:05.713 回答
0

当我们有父类的多个子类时,隐式向上转换确实有助于运行时多态性/方法覆盖。在这里,我们可以有一个父类类型的引用变量,而不是创建每个子类的引用变量来引用子类对象,以便将每个引用变量的额外内存分配保存在堆栈内存中。

于 2021-03-09T14:25:27.673 回答