java中upcasting的内存分配

时间:2014-01-27 06:54:54

标签: java memory-management upcasting

考虑这些课程:

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();的内存

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

  

动物a = d;

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

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

答案 2 :(得分:0)

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