之间有什么区别
A a1 = new A();
A a2 = new B();
其中B延伸A
以及如果我执行以下操作会发生什么
a1 = new B();
感谢。
答案 0 :(得分:0)
首先,我建议您read on OOP inheritance and interfaces。
现在回答这个问题。 A a1 = new A();
调用为A
定义的构造函数,生成类型为A
的新对象,并在内存中使用它自己的引用。
A a2 = new B();
将使用新引用创建类型为a2
的新对象B
,就像a1
一样,因为您定义了a2
类型A
和B
扩展A
,a2
只能访问A
中定义的方法,而无需进行显式转换。
a1 = new B();
只会用新对象覆盖a1。
假设a1在随机地址中以current_a1的形式存储在内存中,当您使用a1 = new A();
创建时,当程序到达{{1}时,current_a1将被设置为{{1}的地址如果没有别的东西指向它,那么old_a1最终将被垃圾收集。
示例:
a1 = new B();
我希望这有帮助!然后下一次要求对该主题进行更深入的搜索。