使用相同的引用创建来自不同类的对象

时间:2017-05-12 15:16:26

标签: java oop

之间有什么区别
A a1 = new A();
A a2 = new B();

其中B延伸A

以及如果我执行以下操作会发生什么

a1 = new B();

感谢。

1 个答案:

答案 0 :(得分:0)

首先,我建议您read on OOP inheritance and interfaces

现在回答这个问题。 A a1 = new A();调用为A定义的构造函数,生成类型为A的新对象,并在内存中使用它自己的引用。 A a2 = new B();将使用新引用创建类型为a2的新对象B,就像a1一样,因为您定义了a2类型AB扩展Aa2只能访问A中定义的方法,而无需进行显式转换。

a1 = new B();只会用新对象覆盖a1。 假设a1在随机地址中以current_a1的形式存储在内存中,当您使用a1 = new A();创建时,当程序到达{{1}时,current_a1将被设置为{{1}的地址如果没有别的东西指向它,那么old_a1最终将被垃圾收集。

示例:

a1 = new B();

我希望这有帮助!然后下一次要求对该主题进行更深入的搜索。