版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/newbie0107/article/details/87101031
this关键字
第一种用法
调用实例属性、实例方法。如:this.age,this.sayHi()
当实例变量和局部变量重名时,优先访问局部变量。此时,如果访问实例变量,需要增加“this.”前缀。不存在重名时,则可以省略“this”。
public class TestThis{
public int num = 10;
public int num2 = 30;
public void print(){
int num = 20;
System.out.println(num); // 20
System.out.println(this.num); //10
System.out.println(num2); //30
}
}
第二种用法
调用本类中的其它构造方法,如:this(),this(实参)
class CRect{
int width,length;
CRect(){
width = length = 0;
}
CRect(int width){
this();
this.width = width;
}
CRect(int width,int length){
this(width);
this.length = length;
}
}
super关键字
第一种用法
在子类中,可直接访问从父类继承到的属性和方法,但是如果子类的属性或方法存在重名(属性遮蔽、方法覆盖时),需要加以区分,才可访问。
父子类的同名属性不存在覆盖关系,两块空间同时存在(子类遮蔽父类属性),需要使用不同的前缀进行访问。
class A{
int value = 10;
}
class B extends A{
int value = 20;
public void print(){
int value = 30;
System.out.println(value); //30
System.out.println(this.value); //20
System.out.println(super.value); //10
}
}
第二种方法
super( ):表示调用父类无参构造方法。如果没有显式书写,隐式书写在子类构造方法的首行。
super(实参):表示调用父类有参构造方法。
public class TestSuper {
public static void main(String[] args) {
new B();
/* 执行结果:
A-无参构造方法
B-无参构造方法
*/
new B(10);
/* 执行结果:
A-无参构造方法
B-有参构造方法-10
*/
}
}
class A{
public A(){
System.out.println("A-无参构造方法");
}
public A(int value){
System.out.println("A-有参构造方法-"+value);
}
}
class B extends A{
public B(){
System.out.println("B-无参构造方法");
}
public B(int value){
super();
System.out.println("B-有参构造方法-"+value);
}
}
this与super
- this或super使用在构造方法中时,都要求在首行。当子类构造中使用了this( )或者this(实参),即不可再同时使用super( )或super(实参)。
- 如果子类的构造方法中,没有显示定义super( )或super(实参),则默认提供。