this和super都有两种用法,this. this() 、super. super()
this.
表示当前对象
1)可以访问被本类自己定义的属性和行为,不受访问修饰符的限制。
2)可以访问父类定义的属性和行为,受访问修饰符的限制。
this( )
在本类的构造方法中去调用本类的另一个构造方法。
1)只能写在构造方法的第一行;
2)不默认执行,必须手写指定。
super.
当前对象的父类对象部分,
1)可以访问父类定义的属性和行为,但是受访问修饰符限制。
2)当我们调用一个方法重写前的实现,才用super.
super()
1)在本类的构造方法中,调用父类指定的构造方法;不写会默认调用父类的公共无参构造
2)只能写在第一句
(具体比较汇总如下表)
this | super | 特殊之处 | |
---|---|---|---|
· | this. 当前对象,通俗的讲“我”(1) 可以访问被本类自己定义的属性和行为,不受访问修饰符的限制。(2) 可以访问父类定义的属性和行为,受访问修饰符的限制。 | super. 当前对象的父类对象部分,通俗的讲“我爸”。(1) 不能访问本类自己定义的属性和行为。(2) 可以访问父类定义的属性和行为,但是受访问修饰符限制。 | 当我们调用一个方法重写前的实现,用super. 其余时候,我们用this. (super.能看到的this.一定能看到) |
() | this()在本类的构造方法中去调用本类的另一个构造方法。其目:构造方法中的代码共享。(1) 只能写在构造方法的第一行;(2) 不默认执行,必须手写指定。 | super() 在本类的构造方法中,调用父类指定的构造方法;目标:让父类的构造方法与子类的构造方法达到代码的共享。(1) 只能写在第一句;(2) 不写也有默认,且默认调用父类的公共无参构造 | 两者都是为了实现构造方法中代码的优化、复用,并不是必须的。 |