Animal a = d;
a
is just a reference and the reference's memory is allocated in method stack(or jvm stack, not heap).
That is when invoke the method main
, JVM will allocate a stack which contains the reference's space.
Question
Considering these classes:
public class Animal{
}
public class Dog extends Animal{
}
public AnimalTest(){
public static void main(String[] args){
Dog d = new Dog();
Animal a = d;
}
}
my question is since I performed an upcasting on Animal a = d;
does it consume a new memory allocation on the machine or does it use the memory allocated to the Dog d = new Dog();
Solution 2
Animal a = d;
a
is just a reference and the reference's memory is allocated in method stack(or jvm stack, not heap).
That is when invoke the method main
, JVM will allocate a stack which contains the reference's space.
OTHER TIPS
The Actual object or its memory footprint is not affected. just a new reference to the object is created. The only difference is that the reference a
can only call methods or access attributes that was available in the Super Class Animal.
Implicit upcasting really helps in Runtime polymorphism/ method overriding when we have multiple child classes of a parent class. Here, instead of creating reference variables of each child class for referring to the child class object, we can have a single reference variable that is of parent class type in order to save the extra memory allocation for each reference variable in stack memory.