Java this和super关键字

this关键字

参考了:https://docs.oracle.com/javase/tutorial/java/javaOO/thiskey.html

  Java中this关键字通常有以下几个用法:

  1. 作为构造器中的指示隐式参数,如:

    1
    2
    3
    4
    5
    6
    public class Foo {
    private String a;
    public Foo(String a) {
    this.a = a;
    }
    }
  2. 引用同一个类中的其它构造器

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public class Foo {
    private String a;
    public Foo() {
    this("");
    }
    public Foo(String a) {
    this.a = a;
    }
    }

    这里默认构造起通过this关键字调用了另外一个构造器。

super关键字

  Java中super关键字通常有以下几种用途:

  1. 调用父类的方法

    1
    2
    3
    4
    5
    6
    public class Manager extends Employee {
    ....
    public double getSalary() {
    double b = super.getSalary(); // 调用父类的getSalary方法
    }
    }
  2. 在构造器中调用父类构造器方法

    1
    2
    3
    4
    5
    6
    7
    public class Manager extends Employee {
    private int bonus;
    public Manager(String n) {
    super(n); // 调用父类构造器方法
    bonus = 0;
    }
    }

    需要注意的是,如果在构造器中利用super调用超类的构造器,super语句要位于方法的第一条。而且如果子类的构造器没有显示地调用超类构造器,会自动调用超类的默认构造器。如果超类没有默认构造器,子类构造器中又没有显示调用超类的构造器,那么编译器会报错。