this和super在类中的成员变量访问中起到了很重要的作用。this和super都有两种用法,这里先解释this 的用法。

this语句【this.()】

this语句只能在构造方法中使用,且必须放在构造方法中的首行,this语句的作用是直接为成员变量赋值。

this关键字

this关键字用来访问成员变量,同时也可以用于区别成员方法中定义的与成员变量同名的局部变量

下面看一下示例:

  1. package com.bxw.demo.demo04;
  2. public class this语句与关键字 {
  3. public static void main(String[] args) {
  4. Test test = new Test();
  5. // 获取初始化赋值
  6. System.out.println("name:" + test.getName() + " age:" + test.getAge());
  7. }
  8. }
  9. // 创建一个类
  10. class Test{
  11. private String name;
  12. private int age;
  13. public Test() {
  14. // 使用this语句为成员变量初始化赋值
  15. this("jack",23);
  16. }
  17. public Test(String name, int age){
  18. this.name = name; // 这就是this关键字,用于直接访问成员变量,同时区分成员变量与局部变量
  19. this.age = age;
  20. }
  21. public String getName() {
  22. return name;
  23. }
  24. public void setName(String name) {
  25. this.name = name;
  26. }
  27. public int getAge() {
  28. return age;
  29. }
  30. public void setAge(int age) {
  31. this.age = age;
  32. }
  33. }

super语句【super()】

super语句用于子类为父类初始化赋值,这里需要提前涉及到继承的知识,也就是super语句是针对父类的成员变量。同样的super语句也只能在子类的构造方法的首行,且只能出现一次。这里还需要注意的是,super语句和this语句都必须出现在构造方法的首行,因此两个语句只能二选一。

super关键字

同样的,super关键字也是用于访问父类的成员变量,且只能在子类的成员方法中使用。

下面看一个示例:

  1. package com.bxw.demo.demo04;
  2. public class super语句与关键字 {
  3. public static void main(String[] args) {
  4. new Zi().get();
  5. }
  6. }
  7. // 创建父类
  8. class Fu {
  9. private String name;
  10. private int age;
  11. public Fu() {
  12. }
  13. public Fu(String name, int age) {
  14. this.name = name;
  15. this.age = age;
  16. }
  17. public String getName() {
  18. return name;
  19. }
  20. public void setName(String name) {
  21. this.name = name;
  22. }
  23. public int getAge() {
  24. return age;
  25. }
  26. public void setAge(int age) {
  27. this.age = age;
  28. }
  29. }
  30. // 创建子类
  31. class Zi extends Fu{
  32. private int id;
  33. public Zi() {
  34. super("jack",34);
  35. }
  36. public Zi(String name, int age, int id) {
  37. super(name, age); // 这里就是super语句的体现,不过这个我们不用,我用可以只用空参构造来演示
  38. this.id = id;
  39. }
  40. // 创建一个方法,用户获取父类初始化后的成员变量的值
  41. public void get(){
  42. System.out.println("父类中的name:" + super.getName() + "父类中的age:" + super.getAge());
  43. // 这里需要解释解释一下,this关键字可以直接访问本类中的成员变量,无论是私有还是公共的。
  44. // 但是子类访问父类的成员变量,如果父类中的成员变量是私有的,那么只能通过啊super关键字
  45. // 通过super关键字调用父类中的公共访问方式,从而来访问父类中的成员变量
  46. }
  47. }