Java基础(三)----------Java中this和super关键字

1.this对象本身

在Java语言中,当创建一个对象后,Java虚拟机就会为其分配一个指向对象本身的指针,这个指针就是“this”(在java里面没有指针的定义。但是java里面的“指针”无处不在)。

在我们使用this时,this一般出现在类的方法里面,当这个方法还没有调用的时候this指的是谁并不知道,但是实际当中如果new一个对象出来之后,this指的就是当前这个对象,对哪个对象调用这个方法this指的就是谁.如果再new一个对象,这个对象也有自己的this.this指的就是另外一个对象了。

this应用场景:

(1)引用成员变量,this这个关键字其代表的就是对象中的成员变量或者方法。

public class User {
	 String name; 	//	定义一个成员变量name
	 
	 private void SetName(String name) { 	//	定义一个局部变量name
		 this.name=name; //	将局部变量的值传递给成员变量
	 }
}

(2)调用类的构造方法,this这个关键字其代表的就是对象中的成员变量或者方法。

public class User {	//	定义一个类,类的名字为User
	
	public User(String name) { //	定义一个带形参的构造方法
		
	}
	
	public User() {	//	定义构造方法
		this("张三");	//	调用类的构造方法
	}
}

(2)返回对象的值,可以使用return this来返回一个类的引用(实际调用这个方法的实例对象)。

public class User {	
	String name;	//	定义一个成员变量name
	
	User setName(String name) {	//	定义一个局部变量name
		this.name = name;	//	将局部变量的值传递给成员变量
		return this;	//返回对象User
	}
	
	public static void main(String[] args) {
		User u=new User();	//	创建User对象
		User user=u.setName("张三");	//	调用setName,获取返回的新对象
		
		System.out.println(user.name);	//打印name的值
	}
	
}

参考了Java初级码农java中this关键字的作用

2.super父类对象

super关键字表示对某个类的父类的引用。

super应用场景:

(1)访问被子类的成员隐藏的父类成员。

public class SuperTest {
	
	public String name;	//	定义一个成员变量name
	
	public void s() {	//	定义一个普通方法
		name="父类";		//	给成员变量赋值
		System.out.println("super类的名称叫"+name);
	}
}
public class ChildTest extends SuperTest{

	public void s() {	//重写方法s
		super.s();//	使用super作为父类对象的引用对象来调用父类对象里面的s()方法
	}
	public static void main(String[] args) {
		ChildTest t=new ChildTest();	
		t.s();
	}
}

(2)调用父类的构造函数,构造函数不会被继承。只会被调用。

public class SuperTest {
	
	public SuperTest() { //	定义一个带形参的构造方法
		System.out.println("super类的无参构造方法");
	}
	
	public SuperTest(String name) {	//	定义构造方法
		System.out.println("super类的有参构造方法");
	}
	
}
public class ChildTest extends SuperTest{

	public ChildTest(){
      super();//	子类所有的 构造函数 默认调用父类的无参构造函数,可省略省略掉super();也可以自行添加到构造函数的第一行(必须是第一行,否则报错)
      System.out.println("子类 无参 构造函数");
    }
	public ChildTest(String name){
		super(name);//调用父类中的有参构造函数(应该为构造函数中的第一条语句)
		System.out.println("子类 有参 构造函数");
	}
}
  •  子类所有的 构造函数默认调用父类的无参构造函数,可省略super(),若是想写上必须写在第一行。
  • 如果子类的某个构造函数想调用父类的其他的带参数的构造函数,在构造函数的第一行添加 super(val1,val2,…)。
  • 添加了super(val1,val2,…),就可以指定调用父类的那个参数类型和数量一致的构造函数。之后在此子类构造函数中,系统不会再默认调用父类无参构造函数。
  • super指代父类对象,可以在子类中使用 super.父类方法名();调用父类中的方法。

参考了Yi骑绝尘Java 子类调用父类构造函数----super()详解

3.this和super的区别

参考了亿念之茶Java super和this的异同总结https://blog.csdn.net/lh__huahuan/article/details/50447812

扫描二维码关注公众号,回复: 4903511 查看本文章
  • super()和this()类似,区别是,super()从子类中调用父类的构造方法,this()在同一类内调用其它方法。
  • super()和this()均需放在构造方法内第一行。
  • 尽管可以用this调用一个构造器,但却不能调用两个。
  • this和super不能同时出现在一个构造函数里面,因为this必然会调用其它的构造函数,其它的构造函数必然也会有super语句的存在,所以在同一个构造函数里面有相同的语句,就失去了语句的意义,编译器也不会通过。
  • this()和super()都指的是对象,所以,均不可以在static环境中使用。包括:static变量,static方法,static语句块。
  • 从本质上讲,this是一个指向本对象的指针, 然而super是一个Java关键字。

猜你喜欢

转载自blog.csdn.net/qq_36004677/article/details/86419491