关于Super关键字的理解

简介: 深入理解Super关键字

@[TOC](学习目录

一.super使用场景

==在继承关系中,子类的无参构造器默认super()调用父类的==
==访问父类的属性和方法==
==调用父类构造器==

二.super用法

super代表父类的引用,它用于访问父类的属性,方法,构造器
建立在继承关系之上,依照访问修饰符遵循相应的访问规则
super大部分情况下是可以省略的,子类需要访问父类时,需要显式地写出来
1.super访问父类属性:

  public void hey(){
        this.name=super.name;   
        System.out.println(name);  //输出的是父类的属性
    }
AI 代码解读

通过一个小例子展示了通过super,访问并输出了父类的name属性
这里的name数据类型是引用类型,就相当于本类中name指向的是父类所对应的属性地址,达到访问父类属性的效果
2.super访问父类方法:

    public void hey(){
        //super可以调用父类的方法不能调用private方法
        super.test100();  //test100为父类中可访问的方法
        super.test200();
        super.test300();
    }
AI 代码解读

3.访问父类构造器:

  public Person(String name, int age,double score) {
        super(name, age);  //访问父类构造器
        this.score=score;   //子类属性由子类初始化
    }
AI 代码解读

三.super使用细节

①调用父类构造器可以让我们的分工更明确,因为父类属性是继承而来,所以由父类初始化,而子类中的属性可以由子类来初始化
②当出现特殊性情况,子类中有和父类中的成员方法/属性重名时,为了访问父类成员,必须通过super来指定,这就很大程度上体现了super的作用!例如:

public class Test001 {
    public static void main(String[] args) {
        Test test=new Test();
        test.hey();
    }
}
class Test0001{
    String name="22";
}
class Test extends Test0001{
    String name ="11";
    public void hey(){
        System.out.println(super.name);
    }
}
AI 代码解读

运行结果:

22
AI 代码解读

四.super越级访问

super的访问不仅仅局限于邻近的父类,也可以是爷爷类,曾祖父类...:
访问的规则遵循就近原则
有一组继承关系CC—>BB—>AA

例如

class AA{
    int a=888;
}
class BB extends AA{
    int b=88;
}
class CC extends BB{
public void getNum() {
        System.out.println(super.a);
    }
}
public class Test {
    public static void main(String[] args) {
        CC c=new CC();
        c.getNum();
    }
}
AI 代码解读

运行结果

888
AI 代码解读

”访问了他的爷爷类“
就近原则示意图:
在这里插入图片描述

五. super与this

this super
访问本类属性,没有就从父类查找 从父类开始查找属性
访问本类中的方法,没有就从父类查找 从父类开始查找方法
调用本类构造器,必须放在构造器首行 调用父类构造器,使用时放在首行
表示当前对象 用于子类访问父类对象
相关文章
C++一分钟之-C++中的静态成员与静态函数
【6月更文挑战第20天】在C++中,静态成员(变量&函数)打破对象实例化规则,提供类级共享。静态变量独占一份,用于计数或共享配置,需类外初始化,注意访问权限。静态函数不依赖对象,直接通过类名调用,不使用`this`指针,适合工具函数或操作静态变量。示例展示了静态成员的使用,强调了理解和避免常见问题的重要性。
106 4
|
11月前
|
C++程序中的静态成员
C++程序中的静态成员
61 1
|
11月前
|
37静态成员
37静态成员
41 0
类和对象:初始化列表,静态成员,友元,内部类,匿名对象
类和对象:初始化列表,静态成员,友元,内部类,匿名对象
<c++> 类的继承 | 基类与派生类 | 构造函数与析构函数
<c++> 类的继承 | 基类与派生类 | 构造函数与析构函数
186 0
静态成员,友元函数,友元类
🐰静态数据成员 🌸静态数据成员的声明: 🌸静态数据成员的初始化: 🌸静态数据成员的访问: 🐰静态成员函数 🌸静态成员函数的声明 🌸静态数据成员函数的访问 🐰友元函数 友元函数的声明 🐰 友元类