1.super与this的对比
(1)this
this能出现在实例方法和构造方法中,this不能使用在静态方法中。this的语法是:"this.“或"this()”。"this."大部分情况下是可以省略的,在区分局部变量和实例变量的时候不能省略。"this()"只能出现在构造方法第一行,通过当前的构造方法去调用“本类”中其他构造方法,目的是:代码复用。
(2)super
super能出现在实例方法和构造方法中,super不能使用在静态方法中。super的语法是:"super.“或"super()”。"super()"只能出现在构造方法第一行,通过当前的构造方法去调用“父类”中的构造方法,目的是:代码复用(创建子类对象的时候,先初始化父类型特征)。
"super."大部分情况下是可以省略的,什么情况下不能省略呢?
当一个子类构造方法的第一行既没有this()又没有super()的话,默认会有一个super(),调用该子类构造方法时,会通过super()先调用父类构造方法。这实际上模拟的是“先有父亲,才有儿子”。注意: 当父类构造方法有参时,需要相应地手动实现一个带参数的super方法。
注意: 对this()/super()的调用必须是构造器中的第一个语句,否则报错。因此,this()和super()不能共存于同一个构造方法中。
注意: 在构造方法执行过程中一连串调用了父类的构造方法,父类的构造方法又继续向上调用其父类的构造方法,但是实际上对象只创建了一个。
"super(实参)"到底是干啥的?"super(实参)"的作用是初始化当前对象的父类型特征,并不是创建新的对象,实际上对象只创建了一个。
注意: "super."什么时候不能省略?父类与子类属性同名时,如果想在子类中访问父类的属性,此时"super."不能省略。
注意: super不是引用,super不保存内存地址,也不指向任何对象。super只是代表当前对象内部的那一块父类型的特征。
注意: this和super都不能使用在static静态方法中。