2014-01-27 5 views
3

Учитывая эти классы:выделение памяти для приведения к базовому типу в Java

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

'Animal a = d;' просто ссылка, без выделения памяти. – lichengwu

ответ

0

Animal a = d;

a - это просто ссылка, а память ссылки выделяется в стеке метода (или стек jvm, а не куча).

То есть при вызове метода main JVM выделит стек, который содержит пространство ссылки.

+0

Спасибо за ответ, я также хотел бы спросить, что, поскольку Animal a является ссылкой и выделяется в стеке, где выделен Dog d? на куче? – anathema

+0

@anathema Да, 'new Dog()' выделяется на куче JVM. – lichengwu

1

Фактический объект или его площадь памяти не затрагиваются. создается только новая ссылка на объект. Единственное различие заключается в том, что ссылка a может вызывать только методы или атрибуты доступа, доступные в Super Class Animal.

Смежные вопросы