学习-Java继承和多态之super关键字

第1关:学习-Java继承和多态之super关键字

任务描述

本关任务:根据要求补全 Salary 类,实现输出员工基本信息和薪水的功能。

相关知识

对于继承父类的子类而言,有时我们需要在子类中访问父类的方法,此时便可以使用 super 关键字。

在 Java 里面,对于 super 关键字的用法:

  1. 子父类存在着同名的成员(包括变量和方法)时,在子类中默认是访问子类的成员,可以通过 super 关键字指定访问父类的成员;

  2. 创建子类对象时,默认会先调用父类无参的构造方法,可以通过 super 关键字指定调用父类的构造方法。

    • 如果在子类的构造方法上没有指定调用父类的构造方法,那么 Java 编译器会在子类的构造方法内加上 super() 语句;
    • super 关键字调用父类的构造函数时,该语句必须要是子类构造函数中的第一个语句;
    • super 与 this 关键字不能同时出现在同一个构造函数中调用其他的构造函数。因为两个语句都需要是第一个语句。

super 关键字主要存在于子类方法中,用于指向子类对象中的父类对象;可以访问父类的属性、函数以及构造函数。

例子:使用 super 调用父类的构造方法。

 
  1. class People{
  2. int number; // 证号
  3. String name; // 名称
  4. // 无参构造
  5. People(){
  6. }
  7. // 有参构造
  8. People(int number,String name){
  9. this.number=number;
  10. this.name=name;
  11. System.out.println("我的名字是"+name+",证号是:"+number);
  12. }
  13. }
  14. // 继承 People 类
  15. class Adult extends People{
  16. boolean a; // 是否为成年人
  17. Adult(int number,String name,boolean b){
  18. // 调用父类的构造方法
  19. super(number,name);
  20. a=b;
  21. System.out.println("是否成年="+a);
  22. }
  23. }
  24. public class Test {
  25. public static void main(String[] args) {
  26. Adult adult = new Adult(9901, "张三", false);
  27. }
  28. }

执行结果:

 
  1. 我的名字是张三,证号是:9901
  2. 是否成年=false

例子:子类使用 super 访问和调用被子类隐藏的成员变量和方法。

 
  1. class Sum {
  2. int n;
  3. // 计算 1+2+...+n 的值
  4. float f() {
  5. float sum=0;
  6. for(int i=1;i<=n;i++){
  7. sum=sum+i;
  8. }
  9. return sum;
  10. }
  11. }
  12. // 继承 Sum 类
  13. class Average extends Sum{
  14. int n;
  15. // 计算 1+2+...+n 的平均值
  16. float f() {
  17. float c;
  18. super.n=n;
  19. // 调用父类的计算 1+2+...+n 的方法
  20. c=super.f();
  21. return c/n;
  22. }
  23. // 计算 (1+2+...+n)/2 的值
  24. float g() {
  25. float c;
  26. c=super.f();
  27. return c/2;
  28. }
  29. }
  30. public class Test {
  31. public static void main(String[] args) {
  32. Average aver=new Average();
  33. aver.n=100;
  34. float resultOne=aver.f();
  35. float resultTwo=aver.g();
  36. System.out.println("resultOne="+resultOne);
  37. System.out.println("resultTwo="+resultTwo);
  38. }
  39. }

执行结果:

 
  1. resultOne=50.5
  2. resultTwo=2525.0
编程要求

仔细阅读右侧编辑区内给出的代码框架及注释,按照提示编写程序代码。

测试说明

平台将使用测试集运行你编写的程序代码,若全部的运行结果正确,则通关。 可在右侧“测试结果”区查看具体的测试集详情。


开始你的任务吧,祝你成功!

源代码:

/*
* 根据要求补全 Salary 类,实现输出员工基本信息和薪水的功能。
 */
class Employee {
    private String name;// 员工姓名
    private String birth;// 出生年月
    private String position;// 职位

    // 使用有参构造方法初始化Employee
    public Employee(String name, String birth, String position) {
        this.name = name;
        this.birth = birth;
        this.position = position;
    }
    // 定义 introduction 方法输出员工信息
    public void introduction() {
        System.out.println("员工姓名:" + name + "\n出生年月:" + birth + "\n职位:" + position);
    }

}

public class Salary extends Employee {
    private double salary; // 薪水
    // 请在下面的Begin-End之间按照注释中给出的提示编写正确的代码
    /********* Begin *********/
    // 定义Salary的有参构造方法,同时在子类中指代父类构造器
    Salary(String name, String birth, String position,double salary){
       super(name,birth,position);
       this.salary=salary;
    }
    // 重写introduction方法,使用super保留父类原有的功能,新添输出员工薪水的功能
    public void introduction(){
         super.introduction();
         System.out.println("薪水:"+salary);
     }
    /********** End **********/
}

  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值