关于多态的一些看法

我们都知道多态是父类引用指向子类对象

Card card = new SavingCard();

card是一个父类型的变量,存储在栈区,储蓄卡SavingCard是一个子类型的对象,存储在堆区

此处先讨论无参构造函数,当new出SavingCard对象的时候,由于SavingCard继承了Card类的所有成员变量和方法(包括私有的),当调用SavingCard()构造函数的时候,也会调用super()也就是父类的构造函数,此处调用父类的构造函数并不会创建出一个父类对象,但是会划分一块堆内存空间给父类,因为在构造方法执行之前还有初始化的步骤(关于初始化目前还不是很了解是一个怎样的过程,但我在下一段会用自己的见解暂时描述一下),此处super()相当于调用父类Card的初始化方法,而父类Card的构造方法中super()则是调用Object的初始化方法,等到所有初始化完毕,等待其他方法里调用new SavingCard()才会创建出一个SavingCard对象。(具体详细解释可以参考http://www.cnblogs.com/uoar/p/7162337.html 中的说明)

关于初始化是一个怎样的步骤:

在上面我们已经知道在构造方法执行之前我们都会调用之前父类的初始化方法,直到调用到Object的初始化方法,所以推断初始化时开辟一块堆内存空间,给声明的成员变量赋值,将方法也加载到这一块堆内存空间,总而言之就是加载当前类的所有成员变量和方法,调用父类的构造方法就是给父类开辟一块内存空间,里面装载了父类的成员变量和方法,并给成员变量赋上初始值,一直到Object类。

原文地址:https://www.cnblogs.com/uoar/p/7152367.html