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 に答える