super关键字的使用总结

一、super关键字的使用

1. 为什么需要super?

举例1:子类继承父类以后,对父类的方法进行了重写,那么在子类中,是否还可以对父类中被重写的方法进行调用?
可以!

举例2:子类继承父类以后,发现子类和父类中定义了同名的属性,是否可以在子类中区分两个同名的属性?
可以!

如何调用? 使用super关键字即可。


2. super的理解:父类的


3. super可以调用的结构:属性、方法、构造器

具体的:
3.1 super调用属性、方法

子类继承父类以后,我们就可以在子类的方法或构造器中,调用父类中声明的属性或方法。(满足封装性的前提下)
如何调用呢?需要使用"super."的结构,表示调用父类的属性或方法。
一般情况下,我们可以考虑省略"super."的结构。但是,如果出现子类重写了父类的方法或子父类中出现了同名的属性时,
则必须使用"super."的声明,显式的调用父类被重写的方法或父类中声明的同名的属性。

举例1:子类继承父类以后,对父类的方法进行了重写,那么在子类中,是否还可以对父类中被重写的方法进行调用? 可以!

package chapter07_oop2.src.com.atguigu05._super;

/**
 * ClassName: Person
 * Description:
 *
 * @Author 尚硅谷-宋红康
 * @Create 9:08
 * @Version 1.0
 */
public class Person {
    //属性
    String name;

    //方法
    public void eat(){
        System.out.println("人吃饭");
    }
    public void sleep(){
        System.out.println("人睡觉");
    }


}

package chapter07_oop2.src.com.atguigu05._super;

/**
 * ClassName: Student
 * Description:
 *
 * @Author 尚硅谷-宋红康
 * @Create 9:08
 * @Version 1.0
 */
public class Student extends Person {

    String school;


    public void study(){
        System.out.println("学生学习");
    }


    public void eat(){
        System.out.println("学生应该多吃有营养的食物");
    }

    public void sleep(){
        System.out.println("学生保证每天不低于10小时的睡眠");
    }


    public  void show(){
        eat(); //省略了this
        this.eat();
        super.eat();
    }




}

package chapter07_oop2.src.com.atguigu05._super;

/**
 * ClassName: StudenTest
 * Package: chapter07_oop2.src.com.atguigu05._super
 * Description:
 *
 * @Author 小白
 * @Create 2024/4/2 11:14
 * @Version 1.0
 */
public class StudenTest {

    public static void main(String[] args) {


        Student s1 = new Student();
        s1.eat();
        s1.sleep();
        s1.show();


    }



}

 

 如果子类没有重写父类中的方法   如果父类还是没有找到 就会找到Object  如果Object还是没有找到  则报错

 

 

举例2:子类继承父类以后,发现子类和父类中定义了同名的属性,是否可以在子类中区分两个同名的属性? 可以!

现在是有五个属性

 

package chapter07_oop2.src.com.atguigu05._super;

/**
 * ClassName: Person
 * Description:
 *
 * @Author 尚硅谷-宋红康
 * @Create 9:08
 * @Version 1.0
 */
public class Person {
    //属性
    String name;
    private  int age;
    int  id = 1001; //身份证号

    //方法
    public void eat(){
        System.out.println("人吃饭");
    }
    public void sleep(){
        System.out.println("人睡觉");
    }

    public  void doSport(){
        System.out.println("人运动");
    }


}

package chapter07_oop2.src.com.atguigu05._super;

/**
 * ClassName: Student
 * Description:
 *
 * @Author 尚硅谷-宋红康
 * @Create 9:08
 * @Version 1.0
 */
public class Student extends Person {

    String school;
    int  id = 1002; //学号


    public void study(){
        System.out.println("学生学习");
    }


    public void eat(){
        System.out.println("学生应该多吃有营养的食物");
    }

    public void sleep(){
        System.out.println("学生保证每天不低于10小时的睡眠");
    }


    public  void show(){
        eat(); //省略了this
        this.eat();
        super.eat();
    }



    public  void  show1(){
        doSport();
        this.doSport();
        super.doSport();
    }


      public  void show2(){
          System.out.println(id);  //1002  找最近
          System.out.println(this.id);//1002 找最近
          System.out.println(super.id); //1001   找父类的属性
      }



}

package chapter07_oop2.src.com.atguigu05._super;

/**
 * ClassName: StudenTest
 * Package: chapter07_oop2.src.com.atguigu05._super
 * Description:
 *
 * @Author 小白
 * @Create 2024/4/2 11:14
 * @Version 1.0
 */
public class StudenTest {

    public static void main(String[] args) {


        Student s1 = new Student();
        s1.eat();
        s1.sleep();
        s1.show();
        s1.doSport();
        s1.show2();


    }



}

总结:加不加super 区别在于有没有同名  如果没有同名  结果都是一样的

3.2 super调用构造器
① 子类继承父类时,不会继承父类的构造器。只能通过“super(形参列表)”的方式调用父类指定的构造器。

举例:

package chapter07_oop2.src.com.atguigu05._super;

/**
 * ClassName: Person
 * Description:
 *
 * @Author 尚硅谷-宋红康
 * @Create 9:08
 * @Version 1.0
 */
public class Person {
    //属性
    String name;
    private  int age;
    int  id = 1001; //身份证号


    public Person() {

        System.out.println("Person()....");
    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public Person(String name, int age, int id) {
        this.name = name;
        this.age = age;
        this.id = id;
    }






    //方法
    public void eat(){
        System.out.println("人吃饭");
    }
    public void sleep(){
        System.out.println("人睡觉");
    }

    public  void doSport(){
        System.out.println("人运动");
    }


}

package chapter07_oop2.src.com.atguigu05._super;

/**
 * ClassName: Student
 * Description:
 *
 * @Author 尚硅谷-宋红康
 * @Create 9:08
 * @Version 1.0
 */
public class Student extends Person {

    String school;
    int  id = 1002; //学号


    public void study(){
        System.out.println("学生学习");
    }


    public void eat(){
        System.out.println("学生应该多吃有营养的食物");
    }

    public void sleep(){
        System.out.println("学生保证每天不低于10小时的睡眠");
    }


    public  void show(){
        eat(); //省略了this
        this.eat();
        super.eat();
    }



    public  void  show1(){
        doSport();
        this.doSport();
        super.doSport();
    }


      public  void show2(){
          System.out.println(id);  //1002  找最近
          System.out.println(this.id);//1002 找最近
          System.out.println(super.id); //1001   找父类的属性
      }



    //测试super调用父类的构造器
    public Student(){
        super();

        System.out.println("Student()...");
    }


}

package chapter07_oop2.src.com.atguigu05._super;

/**
 * ClassName: StudenTest
 * Package: chapter07_oop2.src.com.atguigu05._super
 * Description:
 *
 * @Author 小白
 * @Create 2024/4/2 11:14
 * @Version 1.0
 */
public class StudenTest {

    public static void main(String[] args) {


        Student s1 = new Student();
        s1.eat();
        s1.sleep();
        s1.show();
        s1.doSport();
        s1.show2();

        //************************
        System.out.println();

        Student s2 = new Student();



    }


}

② 规定:“super(形参列表)”,必须声明在构造器的首行。

③ 我们前面讲过,在构造器的首行可以使用"this(形参列表)",调用本类中重载的构造器,
   结合②,结论:在构造器的首行,"this(形参列表)" 和 "super(形参列表)"只能二选一。

④ 如果在子类构造器的首行既没有显示调用"this(形参列表)",也没有显式调用"super(形参列表)",
  则子类此构造器默认调用"super()",即调用父类中空参的构造器。

 

⑤ 由③和④得到结论:子类的任何一个构造器中,要么会调用本类中重载的构造器,要么会调用父类的构造器。只能是这两种情况之一。
⑥ 由⑤得到:一个类中声明有n个构造器,最多有n-1个构造器中使用了"this(形参列表)",
   则剩下的那个一定使用"super(形参列表)"。

--> 我们在通过子类的构造器创建对象时,一定在调用子类构造器的过程中,直接或间接的调用到父类的构造器。
也正因为调用过父类的构造器,我们才会将父类中声明的属性或方法加载到内存中,供子类对象使用。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/509725.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ice-06 运用Burp-Suite进行暴力破解(攻防世界)

ice-06 步骤一:点击超链接,发现只有报表中心才有用。 步骤二:点进去发现输入日期范围没有用 步骤三:使用Burp Suite进行抓包,把值传到Action到Intruder中 步骤四:如图所示进行配置 步骤五:攻击…

13.2k star, 高生产力的低代码开发平台 lowcode-engine

13.2k star, 高生产力的低代码开发平台 lowcode-engine 分类 开源分享 项目名: lowcode-engine -- 高生产力的低代码研发平台 Github 开源地址: GitHub - alibaba/lowcode-engine: An enterprise-class low-code technology stack with scale-out design / 一套面…

【滤波器基础】卡尔曼滤波器

滤波器基础 为了进一步抑制高频噪声,科研人员也会采用一些高阶低通滤波器来对电流采样信号的高频噪声进行抑制,常用的一种滤波器为:巴特沃兹滤波器。除了这种滤波器,也存在如贝塞尔、切比雪夫滤波器等。 巴特沃斯滤波器 在线性控…

【御控物联】JavaScript JSON结构转换(15):对象To数组——转换映射方式

文章目录 一、JSON结构转换是什么?二、术语解释三、案例之《JSON对象 To JSON数组》四、代码实现五、在线转换工具六、技术资料 一、JSON结构转换是什么? JSON结构转换指的是将一个JSON对象或JSON数组按照一定规则进行重组、筛选、映射或转换&#xff0…

服务器托管让服务器管理更轻松高效

在信息化飞速发展的今天,服务器作为企业数据处理和信息存储的核心设备,其管理的重要性日益凸显。服务器托管,作为一种高效、专业的服务器管理方式,正逐渐成为众多企业的首选。那么,服务器托管究竟是如何让服务器管理更…

10个最佳3D角色下载站

每个人都喜欢免费的东西。 无论是免费的 3D 角色还是游戏资产,我们都喜欢它们。 以下是可以为你的游戏获取免费 3D 角色的前 10 个网站的列表。 你可以将它们用于多种用途,例如 3D 打印或动画剪辑。 如果需要将下载的3D角色转化为其他格式,可…

面具下的flag【杂项】

知识点: binwalk 检测文件是否合并binwalk -e 文件名 将文件进行剥离,自动解压出压缩包中的文件vmdk文件是可以进行解压的 7z x 文件 -o./vmdk是linux文件,需要在linux中进行解压,看了别人的wp发现在window中解压是没有关键信息…

智能化最积极的海尔,对大模型不着急了

文|刘俊宏 AI改变终端的时代,最早投入智能化的家电公司表现怎么样? 3月27日晚间,海尔智家(下简称海尔)发布其2023年报。财报显示,2023年海尔智家营收2614.28亿元,同比增长7.33%&am…

把组合损失中的权重设置为可学习参数

目前的需求是:有一个模型,准备使用组合损失,其中有2个或者多个损失函数。准备对其进行加权并线性叠加。但想让这些权重进行自我学习,更新迭代成最优加权组合。 目录 1、构建组合损失类 2、调用组合损失类 3、为其构建优化器 …

filebeat日常使用.

先决条件(已经安装好filebeatelasticsearch) 详情可以参考官网,或者 虚拟机部署elasticsearch集群-CSDN博客 centos7 使用rpm包部署filebeat-CSDN博客 filebeat配置文件 标准输入console输出 (1)编写测试的配置⽂件 mkdir /etc/filebeat/config [rootelk101 /tmp]$vim /et…

练习 15 Web [极客大挑战 2019]Knife

因为没有按顺序刷题,这道送分题 要知道两个点 1.什么是“一句话木马” 2.什么是“菜刀” or“蚁剑” 蚁剑连接就行 flag{1b894a2d-8df1-4b06-9054-e90d73257006}

春季养生从睡眠开始

睡眠可以缓解疲劳,恢复精神状态。特别是在春季,调整好睡眠对于养生是很有好处的,HUAWEI WATCH GT 4 系列用更科学的睡眠监测、管理与改善,守护你的好梦。

js 基础知识 forEach 和 map 的区别,及 map 不加 return 返回什么

问题一:forEach 和 map 之间的区别: 1、forEach 不返回新数组,map 返回新数组,其中包含回调函数的返回值。 2、用途:如果只想要遍历数组并对每个元素执行某些操作而不产生新数组,那么应该使用 forEach&am…

Selinux安全策略文件

在Selinux框架中,安全策略都是写在te文件中,以adb.te 文件为例 allow adbd shell_data_file:dir create_dir_perms;策略的基本格式是: rule_name source_type target_type :object_class perm_setrule_name 规则名。常见的规则名有allow,ne…

异常,Lambda表达式

文章目录 异常介绍存在形式程序中异常发生后的第一反应体系JVM的默认处理方案处理方式声明 throws概述格式抛出 throw格式注意意义 throws和throw的区别 捕获 try,catch介绍格式执行方式多异常捕获处理意义 如何选择用哪个 Throwable类介绍常用方法 自定义异常概述实现步骤范例…

论文阅读RangeDet: In Defense of Range View for LiDAR-based 3D Object Detection

文章目录 RangeDet: In Defense of Range View for LiDAR-based 3D Object Detection问题笛卡尔坐标结构图Meta-Kernel Convolution RangeDet: In Defense of Range View for LiDAR-based 3D Object Detection 论文:https://arxiv.org/pdf/2103.10039.pdf 代码&…

docker--部署 (超详版) (五)

环境准备:docker,mysql,redis,镜像,nginx 把虚拟机打开,连接xshell,参考博客: https://blog.csdn.net/m0_74229802/article/details/136965820?spm1001.2014.3001.5501 一&#x…

什么是过载

宇航员相关知识会涉及到过载,导弹相关知识也会涉及到过载,如导弹的过载加速度,什么是过载呢?博主从B站上看到一UP主讲的很好, 该up主视频链接: 过载是什么_哔哩哔哩_bilibili 内容截图如下:

vue+element ui实现表单组件的封装

效果图: 主要是使用vue elmentUi 的from的基础上进行封装 使用改组件,是需要自定义从父组件传入一下字段表单字段 export const topicTypeMainTaskEdit: any new Map([// 主任务可编辑状态[feasibleInstructions, // 督办件[{value: documentNum…

B端:别看分页你天天用,你未必能摸清分页门道,一文告诉你.

在B端系统中,分页的作用是在处理大量数据时,将数据分成多个页面进行展示,以提高系统的性能和用户体验。 分页可以有效减少单个页面加载的数据量,加快页面加载速度,减少服务器和客户端的压力,并且方便用户浏…