Java核心技术卷一 -第五章:覆盖方法与super

系列文章目录

Java核心技术卷一 -第一章:java“白皮书”的关键术语
Java核心技术卷一 -第三章:数据类型
Java核心技术卷一 -第三章:变量与常量
Java核心技术卷一 -第三章:运算符
Java核心技术卷一 -第三章:字符串
Java核心技术卷一 -第三章:输入与输出
Java核心技术卷一 -第三章:数组
Java核心技术卷一 -第四章:类之间的关系-依赖
Java核心技术卷一 -第四章:预定义类-LocalDate类小应用
Java核心技术卷一 -第四章:构造器
Java核心技术卷一 -第四章:null引用
Java核心技术卷一 -第四章:方法参数
Java核心技术卷一 -第四章:对象构造


前言

本人为java初学者,文章内容仅为个人学习总结分享,其中包含了大量Java核心技术卷一里面的文章内容以及一些网站文章内容,由于参考文章过多,在此并不一一列出,如有侵权,请联系删除。

一、覆盖方法与super

我们知道在Java中,类是可以继承的,使用关键字extends,其中继承的新类叫“子类”,被继承的类叫“父类/超类”,但是有时超类中的有些方法对子类并不一定适用。举例来说,像(父类:Employee,子类:Manager),Manager类中的getSalary方法应该返回薪水和奖金的总和。为此,此时我们需要提供一个新的方法来覆盖(override)超类中的这个方法:

public class Manager extends Employee
{

public double getSalary()
{

}

}

但是应该如何实现这个方法呢?乍看起来似乎很简单,只要返回salary和bonus字段的总和就可以了:

public double getSalary()
{
return salary + bonus;//won't work
}

不过,这样做是不行的。回想一下,只有Employee方法能直接访问Employee类的私有字段。这意味着,Manager类的getSalary方法不能直接访问salary字段。如果Manager类的方法想要访问那些私有字段,就要像所有其他方法一样使用公共接口,在这里就是要使用Employee类中的公共方法getSalary.
现在,再试一下。你需要调用getSalary方法而不是直接访问salary字段:

public double getSalary()
{
double baseSalary getSalary();//still won't work
return baseSalary + bonus;
}

上面这段代码仍然有问题。问题出现在调用getSalary的语句上,它只是在调用自身,这是因为Manager类也有一个getSalary方法(就是我们正在实现的这个方法),所以这条语句将会导致无限次地调用自己,直到整个程序最终崩溃。
这里需要指出:我们希望调用超类Employee中的getSalary方法,而不是当前类的这个方法。为此,可以使用特殊的关键字super解决这个问题:

super.getSalary()

这个语句调用的是Employee类中的getSalary方法。下面是Manager类中getSalary方法的正确版本:

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

总结

以上就是本文的内容,记录了一些关于java“覆盖方法与super”的内容,
其实本文的重点是在子类调用父类的方法,也就是“super.方法”。本人也是刚开始接触java,不能保证总结内容的正确性,若是有错误的话,欢迎大家指出,谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

luodiab

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值