super 关键字的两个用途

本文介绍了Java编程中super关键字的两个主要用途:调用超类的方法和构造器。在子类中,super用于访问父类的非重写方法和在子类构造器中调用父类的构造器,确保正确初始化。通过实例分析了如何避免无限递归问题并理解super的关键作用。
摘要由CSDN通过智能技术生成

super 关键字的两个用途

在学java核心技术这本书时,在超类和子类部分,看到了对super关键字的讲述,在此总结一下

1、 调用超类的方法


     例如,超类是 Employee,包含私有域:name、salary和 hireDay;包含方法 getSalary,getName、getHireday;
子类是 manager,继承上述三个私有域,新增奖金私有域 bonus;

     此时子类 manager 的getSalary 方法与超类 Employee的方法不适应,manager 类中的getSalary方法应该返回 salary (工资)和 bonus(提成)的总和,此时,需要提供一个新的方法来覆盖超类中的这个方法。

     一次错误的尝试,如下

public double get Salary()
{
	double baseSalary = getSalary();
	return baseSalary + bonus;
}

     然而,上述代码还是不能成功运行,问题出现在调用getSalary的语句上,因为 manager 中本身就有 getSalary 方法(就是正在实现的这个方法),所以,这条语句会无限次调用自己本身,直到程序崩溃。

     所以我们需要能够调用到超类的 getSalary 方法,而不是本类中的 getSalary ,因此利用 super 关键字解决此问题,如下:

public double get Salary()
{
	double baseSalary = super.getSalary();
	return baseSalary + bonus;
}

     在这里需要说明的一点是,super 只是一个指示编译器调用超类方法的关键字,与 this 的引用不太一样。


2、 调用超类的构造器


     还是通过上面的超类 Employee 和子类 manager 进行理解

     manager 类的构造器是不能访问 Employee 的私有域,所以必须要利用 Employee 类的构造器对这部分私有域进行初始化,通过super 关键字实现对超类构造器的调用。
     需要注意的是,使用 super 调用构造器的语句必须是子类构造器的第一条语句。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值