Java基础—— “ super ” 关键字
super 关键字
super
super代表父类的引用,用于访问父类的属性、方法、构造器
1、基本语法:
- 访问父类的属性,但不能访问父类的private属性:【案例】super.属性名;
- 访问父类的方法,不能访问父类的private方法:【案例】super.方法名(参数列表);
- 访问父类的构造器(这点前面用过): super(参数列表);只能放在构造器的第一句,只能出现一句!
2、super 给编程带来的便利 / 细节:
- 调用父类的构造器的好处(分工明确,父类属性由父类初始化,子类的属性由子类初始化)
- 当子类中有和父类中的成员(属性和方法)重名时,为了访问父类的成员,必须通过super。如果没有重名,使用super、this、直接访问是一样的效果!
- super的访问不限于直接父类,如果爷爷类和本类中有同名的成员,也可以使用super去访问爷爷类的成员;如果多个基类(上级类)中都有同名的成员,使用super访问遵循就近原则。
class A {
public int n = 50;
public void call(){
System.out.println("A.call()");
}
}
class B extends A{
private int n = 100;
public void sum(){
// 子类 B 没有 call() 方法时,可以使用以下三种方法调用
// 找 call() 方法时,顺序是:
// (1)先找本类,如果有,则调用
// (2)如果没有,则找父类(如果有,并可以调用,则调用)
// (3)如果父类没有,则继续找父类的父类,整个规则,就是一样的,直到0bject类
// 提示:如果查找方法的过程中找到了,但是不能访问,则报错
// 如果查找方法的过程中,没有找到,则提示方法不存在
// call();
// this.call() 的逻辑与 call() 一样
// this.call();
// 找 call() 方法的顺序是直接查找父类,其他的规则一样,即:父类没有就继续找父类的父类...
super.call();
// 先找本类,如果有,并可以调用,则调用
System.out.println(n);
System.out.println(this.n);
// 直接从父类找起,如果有,并可以调用,则调用
System.out.println(super.n);
}
}
3、this 和 super 的比较:
