很水,就这样~

# Java 中的 this 关键字

Java 中 this 是自身的对象,或理解为指向对象本身的指针

# 区分变量和形参

this 的第一个常见用法是用来区分成员变量和形参。例如下面这个例子:

a
class Person{
    private int age = 0;
    public Person();
    public void setAge(int age){
        this.age = age;
    }
}

在此例中, this.age 指代成员变量,而后面的 age 指代形参。

# 引用自身的构造函数

this 的第二个用法是引用自身的构造函数。

class Person{
    private int age = 0;
    private String name = null;
    public Person();
    public Person(int age){
        this.age = age;
    }
    public Person(String name){
        this.name = name;
    }
    public Person(int age, String name){
        this.age = age;
        this(name);
    } 
}

对于不同的参数,往往需要不同的构造函数。如果希望利用已有的构造函数,则可以采用 this ,Java 会自动匹配参数正确的构造函数。

# 引用自身的其他函数

如果一个类希望引用自身的其他函数,常见的方法是将函数声明为 static 或创建实例。如果想要动态地引用,则可以采用 this 自身的实例进行引用。

class Person{
    private int age = 0;
    private String name = null;
    public Person();
    public Person(int age){
        this.age = age;
    }
    public void setAge(int age){
        this.age = age;
    }
    public void setName(String name){
        this.name = name;
    }
    public void setInfo(int age, String name){
        this.setAge(age);
        this.setName(name);
    }
}

# Java 中的 super 关键字

super 与 this 的思路相近。super 是指向自身父类的指针。因此,可以采用 super 引用父类的同名成员,也可以用 super 引用父类对应的构造函数。例如:

class Person { 
    Person() { 
       System.out.println("父类·无参数构造方法: "+"A Person."); 
    }// 构造方法 (1) 
    
    Person(String name) { 
       System.out.println("父类·含一个参数的构造方法: "+"A person's name is " + name); 
    }// 构造方法 (2) 
} 
    
public class Chinese extends Person { 
    Chinese() { 
       super(); // 调用父类构造方法(1) 
       System.out.println("子类·调用父类"无参数构造方法": "+"A chinese coder."); 
    } 
    
    Chinese(String name) { 
       super(name);// 调用父类具有相同形参的构造方法(2) 
       System.out.println("子类·调用父类"含一个参数的构造方法": "+"his name is " + name); 
    } 
    
    Chinese(String name, int age) { 
       this(name);// 调用具有相同形参的构造方法(3) 
       System.out.println("子类:调用子类具有相同形参的构造方法:his age is " + age); 
    } 
    
    public static void main(String[] args) { 
       Chinese cn = new Chinese(); 
       cn = new Chinese("codersai"); 
       cn = new Chinese("codersai", 18); 
    } 
}

# Reference

  1. 菜鸟教程 - Java 中 this 和 super 的用法总结
  2. CSDN-java 中 this 详解