【发布时间】:2017-05-12 05:56:34
【问题描述】:
这样的东西如何保存在内存中(如堆栈、堆等)?
public class Animal {
// Stuff
}
public class Dog extends Animal {
// Stuff
}
public class Test {
public static void main(String[] args) {
Animal bello = new Dog();
}
}
这是怎么回事:Animal bello = new Dog(); 在记忆中管理?
当bello 是Animal 类型的引用但它指向的对象是Dog 类型时,如何将其保存在内存中
【问题讨论】:
-
不完全确定你在问什么。 reference
bello进入堆栈,因为它位于main的本地。Dog本身在堆上,因为您使用new创建它。但这对于所有对象和引用它们的所有局部变量都是一样的。继承没有区别。 -
@DavidWallace 但如果引用的数据类型与对象的数据类型不同,这不会有什么不同吗?
-
没有。对象知道自己的
class,但不知道引用它的变量的类型。 -
@DavidWallace 啊好吧,如果引用类型也是 Dog,对象 itef 也没有区别?
-
正确。
Dog是Dog,无论有哪些变量引用它,以及这些变量的类型是Dog、Animal还是Object。
标签: java oop inheritance memory-management polymorphism