this和super在类中的成员变量访问中起到了很重要的作用。this和super都有两种用法,这里先解释this 的用法。
this语句【this.()】
this语句只能在构造方法中使用,且必须放在构造方法中的首行,this语句的作用是直接为成员变量赋值。
this关键字
this关键字用来访问成员变量,同时也可以用于区别成员方法中定义的与成员变量同名的局部变量
下面看一下示例:
package com.bxw.demo.demo04;
public class this语句与关键字 {
public static void main(String[] args) {
Test test = new Test();
// 获取初始化赋值
System.out.println("name:" + test.getName() + " age:" + test.getAge());
}
}
// 创建一个类
class Test{
private String name;
private int age;
public Test() {
// 使用this语句为成员变量初始化赋值
this("jack",23);
}
public Test(String name, int age){
this.name = name; // 这就是this关键字,用于直接访问成员变量,同时区分成员变量与局部变量
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
super语句【super()】
super语句用于子类为父类初始化赋值,这里需要提前涉及到继承的知识,也就是super语句是针对父类的成员变量。同样的super语句也只能在子类的构造方法的首行,且只能出现一次。这里还需要注意的是,super语句和this语句都必须出现在构造方法的首行,因此两个语句只能二选一。
super关键字
同样的,super关键字也是用于访问父类的成员变量,且只能在子类的成员方法中使用。
下面看一个示例:
package com.bxw.demo.demo04;
public class super语句与关键字 {
public static void main(String[] args) {
new Zi().get();
}
}
// 创建父类
class Fu {
private String name;
private int age;
public Fu() {
}
public Fu(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
// 创建子类
class Zi extends Fu{
private int id;
public Zi() {
super("jack",34);
}
public Zi(String name, int age, int id) {
super(name, age); // 这里就是super语句的体现,不过这个我们不用,我用可以只用空参构造来演示
this.id = id;
}
// 创建一个方法,用户获取父类初始化后的成员变量的值
public void get(){
System.out.println("父类中的name:" + super.getName() + "父类中的age:" + super.getAge());
// 这里需要解释解释一下,this关键字可以直接访问本类中的成员变量,无论是私有还是公共的。
// 但是子类访问父类的成员变量,如果父类中的成员变量是私有的,那么只能通过啊super关键字
// 通过super关键字调用父类中的公共访问方式,从而来访问父类中的成员变量
}
}