super和this一样只能出现在构造和实例函数中,不能用在静态方法。
super()只能出现在子类构造函数第一行,初始化父类的一些特征。
父类如果有构造方法无参,子类默认调用super(),父类如果没有无参构造,子类必须有个带参数的super方法。
this()和super()不能共存,都只能出现在构造函数第一行。
比如说
public C(){
this(1);
}
public C(int a){
super();
}
这里面this(1)会去调用第二个构造函数,然后就会super()。所以构造函数中只能有一个this()或者super(),最终都会通过super()调到父类的构造函数。
所以java里的object类作为老祖宗一定会被调用,由于栈的特点,最后调用,最先执行完成。
因为子类访问不了父类的私有属性,所以子类中构造函数要有super(参数)才能初始化父类的私有属性。
一个示例内存图,CreditAccount是Account的子类:
super表示的是当前对象的父类特性,是this指向的空间的一部分。
this.不能省的时候是局部变量和实例变量重名,super.不能省是父类子类都有同名变量,但是想访问父类中的对象。
super不像this一样是个引用,不指向任何对象。
如果子类中对父类方法进行了重写,如果想调用父类的方法,就用super。