Java进阶-super 关键字

  1. super 代表的是当前子类对象中的父类型特征;不是引用类型,存储的不是内存地址,指向的不是父类对象
  2. 什么时候使用 ?
    • 子类和父类中都有某个数据,例如,子类和父类中都有 name ,如果要在子类中访问父类的 name,需要使用 super.
  3. 可以用到什么地方?
    • 可以用在成员方法中,不能用在静态方法中
    • 可以用在构造方法中

成员方法中的使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
public class Manager extends Employee {
// 子类重写父类方法
public void work() {
System.out.println("经理在工作!");
}

// 成员方法
public void m1() {
// this.work(); // 经理在工作!
// work(); // 经理在工作!

super.work(); // 工人在工作!
}

/*
* this 和 super 相同,都不能用在静态上下文中
*/
// public static void m2() {
// super.work();
// }

public static void main(String[] args) {
Manager man = new Manager();
man.m1();
}
}

public class Employee {
public void work() {
System.out.println("工人在工作!");
}
}

构造方法中的使用

  1. 语法:super(实参);
  2. 作用:通过子类的构造方法去调用父类的构造方法,给当前子类对象中的父类型特征赋值
  3. 语法规则:一个构造方法第一行如果没有this(...),也没有显示的去调用super(...),系统会默认调用super();
  4. 注意:
    • super(...);只能放在构造方法的第一行
    • 不能与this(...);共存
    • 调用了父类中的构造方法,但是不会创建父类对象
  5. 在 Java 语言中,只要是创建 Java 对象,那么 Object 中的无参数构造方法一定会执行!