由于子类不能继承父类的构造方法,因此,要调用父类的构造方法,必须在子类的构造方法体的第一行使用 super() 方法。该方法会调用父类相应的构造方法来完成子类对象的初始化工作。

在以下情况下需要使用 super 关键字:

  • 在类的构造方法中,通过 super 语句调用该类的父类的构造方法。
  • 在子类中访问父类中的成员。

使用 super 调用父类的构造方法

子类可以通过 super 关键字来调用一个由父类定义的构造方法,格式如下:

super(parameter-list);

其中,parameter-list 指定了父类中构造方法所需的所有参数。super() 必须是在子类构造方法的主体第一行。

例如,在 Person 类中指定了两个构造方法。示例代码如下:

  1. public People(String name,int age,String sex,String sn)
  2. {
  3. this.name=name;
  4. this.age=age;
  5. this.sex=sex;
  6. this.sn=sn;
  7. }
  8. public People(String name,String sn)
  9. {
  10. this.name=name;
  11. this.sn=sn;
  12. }

那么,Student 类继承了 Person 类,就可以使用 super 语句来定义 Student 类的构造方法。示例代码如下:

  1. public Student(String name,int age,String sex,String sn,String stuno,String department)
  2. {
  3. super(name,age,sex,sn); //调用父类中含有4个参数的构造方法
  4. this.stuNo=stuno;
  5. this.department=department;
  6. }
  7. public Student(String name,String sn,String stuNo)
  8. {
  9. super(name,sn); //调用父类中含有两个参数的构造方法
  10. this.stuNo=stuNo;
  11. }

从上述 Student 类构造方法代码可以看出,super 用来直接调用父类中的构造方法,使用它可以使书写代码更简洁方便。

使用 super 访问父类成员

使用 super 访问父类中的成员与 this 关键字的使用相似,只不过它引用的是子类的父类,基本形式如下:

super.member

其中,member 是父类中的方法或属性名称。这种形式多用于子类的成员名隐藏了父类中的同名成员的情况。

例 1

在 Animal 类和 Cat 类中分别定义了 public 类型的 name 属性和 private 类型的 name 属性,并且 Cat 类继承 Animal 类。那么,我们可以在 Cat 类中通过 super 关键字来访问父类 Animal 中的 name 属性,通过 this 关键字来访问本类中的 name 属性,如下面的代码:

  1. //父类Animal的定义
  2. public class Animal
  3. {
  4. public String name; //动物名字
  5. }
  6. //子类Cat的定义
  7. public class Cat extends Animal
  8. {
  9. private String name; //名字
  10. public Cat(String aname,String dname)
  11. {
  12. super.name=aname; //通过super关键字来访问父类中的name属性
  13. this.name=dname; //通过this关键字来访问本类中的name属性
  14. }
  15. public String toString()
  16. {
  17. return"我是"+super.name+",我的名字叫"+this.name;
  18. }
  19. public static void main(String[] args)
  20. {
  21. Animal cat=new Cat("动物","喵星人");
  22. System.out.println(cat);
  23. }
  24. }

上述代码演示了使用 super 实现子类的成员名隐藏父类中同名成员的情况。尽管 Cat 类中的属性 name 隐藏了 Animal 类中的 name 属性,但是 super 允许访问父类中的 name 属性。另外,super 还可以用于调用被子类隐藏的方法。

运行程序,输出结果如下:

我是动物,我的名字叫喵星人

Java super关键字:super调用父类的构造方法、利用super访问父类成员相关推荐

  1. ES6 (二十二)Class 的继承、extends关键字、super 关键字(函数调用(constructor)、对象(父类原型对象))、原型对象(原型链)、Mixin 模式

    ES6 (二十二)Class 的继承.extends关键字.super 关键字(函数调用(constructor).对象(父类原型对象)).原型对象(原型链).Mixin 模式 文章目录 ES6 (二 ...

  2. Java重写、super关键字、继承中的构造方法

    2.super 在Java类中使用super来引用基类的成分 备注:new 一个对象出来的时候,就有一个this 引用,引用指向对象自身:         如果对象是一个子类对象,就有一个super引 ...

  3. Java——this关键字(调用本类属性、调用本类方法、表示当前对象)

    目录 1.调用本类属性 2.调用本类方法 3.表示当前对象 this是一个非常灵活的关键字,不会明确表示一个固定概念,比如int,它就是表示一个整型. 1.调用本类属性 类中有许多成员,大部分情况下类 ...

  4. 字节跳动面试:java实例化对象必须调用类的构造方法

    美团一面(80min) (为保证内容纯正,下面的语言是由程序员Y自己整理的,霸哥没有任何改动) 面试主要是从一个系统设计出发,考察基础跟项目架构经验.美团相当重视基础问题(计算机网络.操作系统) 主要 ...

  5. java中用关键字为共享资源加锁_利用synchronized实现线程同步的案例讲解

    一.前期基础知识储备 (1)线程同步的定义:多线程之间的同步. (2)多线程同步原因:一个多线程的程序如果是通过Runnable接口实现的,则意味着类中的属性将被多个线程共享,由此引出资源的同步问题, ...

  6. 根据父类id查询所有的父级_父类子类抽象类,super final 重写方法,搞懂继承中复杂的知识点...

    继承 继承(Inheritance)可以实现类之间共享属性和方法,是面向对象编程的另一个特性 使用继承可以最大限度地实现代码复用. 定义:继承就是在已有类的基础上构建新的类,一个类继承已有类后,可以对 ...

  7. idea实现抽象类的所有抽象方法_父类子类抽象类,super final 重写方法,搞懂继承中复杂的知识点

    继承 继承(Inheritance)可以实现类之间共享属性和方法,是面向对象编程的另一个特性 使用继承可以最大限度地实现代码复用. 定义:继承就是在已有类的基础上构建新的类,一个类继承已有类后,可以对 ...

  8. java super父类方法_java super关键字,super调用父类构造方法详解

    因为子类不可以继承父类的构造方法,所以,想要调用父类的构造方法的话,那么就可以使用得到super关键字下面的话就来对这个方面做一下详细的讲解. super关键字能够用来访问父类的构造方法.普通方法和属 ...

  9. Java中super关键字调用构造方法小结

    1.子类中所有的构造方法默认都会访问父类中的无参构造方法. 2.子类会继承父类中的数据,还可能回去使用父类的数据.所以子类初始化之前,会先完成父类的初始化,即先访问父类中的无参构造方法. 3.在子类中 ...

最新文章

  1. 解决 win10+pycharm 环境 Matplotlib图表不能在Pycharm中显示的等问题
  2. 解决ModuleNotFoundError: No module named ‘numpy.core._multiarray_umath‘ 错误
  3. opensplice dds v6.3.2_信号发生器与DDS技术,如何攻克设计难关?
  4. Web 趋势榜:上周最有意思、又热门的 10 大 Web 项目 - 210723
  5. mysql练习用的数据集下载(转载+自己补充步骤)
  6. consul运维入门
  7. 顺丰霸榜!国家邮政局2018快递服务调查结果出了
  8. HDU2082 找单词【母函数】
  9. Web API-本地存储
  10. Futter基础第19篇: 实现调用第三方时间选择器、日期选择器、时间戳
  11. 点击IE窗口上方的“X关闭符号”,弹出提示窗口!
  12. MySQL解决中文编码问题
  13. jsbridge实现及原理_Hybrid APP基础篇(四)-JSBridge的原理
  14. 微信小程序健康管理系统的开发与实现
  15. oracle 索引个数限制,oracle索引详解
  16. 2019 | 开启新的堕落生活
  17. 纪念龙舟杯成功A出一道题啦啦啦啦啦啦啦啦(在更新。。。。)
  18. 利用Windows内置工具测试硬盘速度
  19. 机器学习环境配置(Tesla K80安装PyTorch的全过程)
  20. C#中定义装箱和拆箱详解

热门文章

  1. R循环有两个_循环流化床锅炉富氧燃烧与CO2捕集发电机组运行能耗影响因素分析...
  2. 零基础能学好UI设计吗 相关学习规划是什么
  3. 路漫漫其修远兮,吾将上下而求索——《深入浅出MFC》读后感
  4. 北京理工大学计算机在线作业答案,北理工17秋《操作系统》在线作业答案
  5. pthread_barrier_init,pthread_barrier_wait简介
  6. 【算法应该怎么“玩” - 王晓华】第一 - 罪犯真假供词的判断
  7. Rstudio的拓展包下载问题
  8. 杨天南:个股起涨的信号有哪些?
  9. 电子计算机考试,电子计算机考试(整理).doc
  10. 超详细数据库笔记!!!!!!还带55道练习题