this
概念
this通常用来指代当前类的对象,或者指代当前类子类的对象,需要具体情况具体分析,它本质是一个指向当前被调用的方法/属性所属的对象的指针
this的用法
1、通过this调用当前类对象的属性
当构造方法、get和set方法的参数与属性名重复时,通过this调用类的属性
public class ParentClass {
private String name;
public void setName(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
}
2、调用当前类方法
this关键字可以调用当前类的方法,或者父类的非私有方法
public class ParentClass {
public String nation = "China";
public String getNation () {
return this.nation;
}
private void changeNation() {
this.nation = "";
}
}
public class ChildClass extends ParentClass {
public String nation = "America";
public void changeName(String name) {
this.setName(name);
}
public String getNation() {
return this.nation;
}
this.getNation(); // 调用私有方法报错
}
3、this关键字不是静态的,因此不能在静态方法中使用
静态成员在类被加载时就创建了,而this关键字指向当前的实例对象,必须在实例化之后才能使用,因此不能在静态方法或静态代码块中使用this
4、this关键字可以将对象本身传递给外部方法
当某个类的方法需要调用外部方法,而该方法的参数是当前类,可以通过this进行参数传递
public class ThisTest {
static class Person {
public void eat(Apple apple) {
Apple peeled = apple.getPeeled();
System.out.println("Yummy");
}
}
static class Apple {
public Apple getPeeled() {
return Peeler.peel(this);
}
}
static class Peeler {
static Apple peel(Apple apple) {
return apple;
}
}
public static void main(String[] args) {
new Person().eat(new Apple());
}
}
5、this可以调用构造方法
当一个类有多个构造方法时,可以通过this关键字调用不同的构造方法
public class ThisTest {
public ThisTest(int i) {
System.out.println("number is " + i);
}
public ThisTest(String s, int i) {
this(i);
System.out.println("String is " + s);
}
ThisTest() {
this("ss", 1);
System.out.println("No args");
}
public static void main(String[] args) {
ThisTest thisTest = new ThisTest();
}
}
输出结果如下
number is 1
String is ss
No args
super
super用来指向父类对象,可以与this类似,只是this指向自身,而super指向父类