考虑这些课程:
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();
的内存
答案 0 :(得分:1)
实际对象或其内存占用不受影响。只创建一个对象的新引用。唯一的区别是引用a
只能调用超类动物中可用的方法或访问属性。
答案 1 :(得分:0)
动物a = d;
a
只是一个引用,引用的内存在方法堆栈(或jvm堆栈,而不是堆)中分配。
也就是说,当调用方法main
时,JVM将分配一个包含引用空间的堆栈。
答案 2 :(得分:0)
当我们有多个父类的子类时,隐式向上转换确实有助于运行时多态性/方法覆盖。在这里,我们可以有一个父类类型的引用变量,而不是创建每个子类的引用变量来引用子类对象,以便在堆栈内存中为每个引用变量节省额外的内存分配。>