super 关键字

super 关键字

基本介绍

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

基本语法

//com.edu.super_ 下 Super.java

  1. 访问父类的属性,但不能访问父类的private属性[案例] super.属性名;

  2. 访问父类的方法,不能访问父类的private方法 super.方法名(参数列表);

  3. 访问父类的构造器(这点前面用过): super(参数列表);只能放在构造器的第一句,只能出现一句!

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

//SuperDetail.java

  1. 调用父类的构造器的好处 (分工明确,父类属性由父类初始化,子类的属性由子 类初始化)

  2. 当子类中有和父类中的成员(属性和方法)重名时,为了访问父类的成员,必须 通过super。如果没有重名,使用super、this、直接访问是一样的效果!

public class B extends A{
  //访问父类的属性,但不能访问父类的private属性[案例]
  //super.属性名;
  public void hi(){
      System.out.println(super.n1 + " "+ super.n2 + " "+super.n3 );
  }
  public void sum(){
      System.out.println("B类的sum()方法");
      //希望调用父类A类的cal()方法
      //这时,因为子类B没有cal方法因此我们可以使用三种方法
      //1.第一种方法super.cal()
      //cal();
      //这里找cal方法,对应的顺序是:
      //(1)先找本类如果有,就调用
      //(2)如果本类没有就去找父类,父类有且可以调用就调用
      //(3)若父类没有则继续寻找父类的父类,一致按照这样的规则找到object类
      //提示: 假设寻找方法的过程之中 ,找到了 ,但是不可访问 ,就会报错(cannot access)
      // 如果查找的方法的过程当中 ,没有找到 ,则提示方法不存在
      //2.第二种方法this.cal()
      //该方法和cal方法一个意思(等价 call)
      //3.第三种方法super.cal()
      //跳过了cal()的第一个过程直接跳到了找父类的cal
      //表示找的是super的cal方法 ,其余的规则是一样的
       
      //需要知道的是 ,不仅仅是方法按照这个规则 ,属性的调用也是按照这个规则
  }
  //访问父类的方法,不能访问父类的private方法
  //super.方法名(参数列表);
  public void ok(){
      super.test100();
      super.test200();
      super.test300();
  }
  //访问父类的构造器(这点前面用过):
  //super(参数列表);只能放在构造器的第一句,只能出现一句!
  public B(){
      super("jack",10);
      //此时调用的就是父类的有参构造器
  }
}
  1. super的访问不限于直接父类 ,如果爷爷类和本类中有同名的成员,也可以使用super去访问爷爷类的成员 ,如果基类(上级类)中都有同名的成员,使用super访问遵循就近原则。A->B->C ,同时还要遵循访问权限的相关原则

super和this的比较

no.区别点thissuper
1 访问属性 访问本类中的属性 ,如果本类没有此属性则从父类中继续查找 从父类开始查找属性
2 调用方法 访问本类中的方法 ,如果本类没有类中的属性 ,如果本类没有此属性则从父类中继续查找 从父类开始查找方法
3 调用构造器 调用本类的构造器 ,必须放在构造器的首行 调用父类的构造器 ,必须放在子类构造器的首行
4 特殊 表示当前对象 子类中访问父类对象
学习完继承之后 ,类的定义进一步有所完善
package 包名;
class 类名 extends 父类{
成员变量(属性);
构造方法(构造器);
成员方法(成员函数);
}
 
posted @ 2022-04-28 17:02  comia  阅读(54)  评论(0)    收藏  举报