Java中this和super用法

版权声明:本文为博主原创文章,未经博主允许不得转载。 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(实参),则默认提供。

猜你喜欢

转载自blog.csdn.net/newbie0107/article/details/87101031