Java基础—— “ super ” 关键字

super 关键字

super

super代表父类的引用,用于访问父类的属性、方法、构造器

1、基本语法:

  1. 访问父类的属性,但不能访问父类的private属性:【案例】super.属性名;
  2. 访问父类的方法,不能访问父类的private方法:【案例】super.方法名(参数列表);
  3. 访问父类的构造器(这点前面用过): super(参数列表);只能放在构造器的第一句,只能出现一句!

2、super 给编程带来的便利 / 细节:

  1. 调用父类的构造器的好处(分工明确,父类属性由父类初始化,子类的属性由子类初始化)
  2. 当子类中有和父类中的成员(属性和方法)重名时,为了访问父类的成员,必须通过super。如果没有重名,使用super、this、直接访问是一样的效果!
  3. 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 的比较:

经验分享 程序员 微信小程序 职场和发展