super与this关键字

this关键字

this:代表当前类的对象引用

this特点

每个类的每个非静态方法(没有被static修饰)都会隐含一个this引用名称,它指向调用这个方法的对象。
当在方法中使用本类的属性时,都会隐含地使用this名称,当然也可以明确指定。
this可以看作是一个变量,它的值就是当前对象的

this使用场景

当局部变量和成员变量同名时使用this关键字
this关键字可以访问本类构造函数

super关键字

代表父类对象的引用

super使用场景

常用于子类中调用父类成员

this和super的区别

this代表当前对象,super可以理解为父类对象
既然super理解为一个父类对象,那么super应该可以用访问父类的成员
this的主要作用是用来帮我们初始化本类成员(当外界传入的变量名和本类变量名相同的时候)
super的主要作用是帮助我们初始化父类继承过来的成员
任何一个本类成员是不是默认都隐含一个this
任何一个本类的成员同时也可以使用super访问父类的成员

访问成员的区别

成员变量

this.成员变量
super.成员变量
super不能够访问父类私有的成员

成员方法

this.成员方法
super.成员方法

构造方法

this(参数列表)
super(参数列表)
任何一个构造方法都默认会在构造方法的第一句上写上super(),访问父类的无参构造方法
super和this访问构造方法必须出现在构造方法的第一句
this和super在访问构造方法的时候,二者不能共存
static静态的上下文中不能出现this和super

public class SuperDemo02 {
	public static void main(String[] args) {
		Son son = new Son();
		son.show();
	}
}

class Father{
	
	public int num = 10;
	
	public void method() {
		int num = 20;
		System.out.println(num);
	}
}

class Son extends Father{
	
	int num = 30;
	
	public void show() {
		int num = 40;
		// 我想要输出40?
		System.out.println(num);
		// 我想要输出30?
		System.out.println(this.num);
		// 我想要输出20,怎么做?
		super.method();
		// 我想要输出10怎么做?
		System.out.println(super.num);
	}
	
}

猜你喜欢

转载自blog.csdn.net/yjn1995/article/details/89418981