Java语言入门教程(十四):Java语言中方法重载与方法覆盖

很多时候,某个Java类中有多个类似的方法。如Math类中,计算绝对值的方 法就会有多个,因为对不同数据类型的数计算方式不同。比如对float,int, long,double各类型的计算方式各不相同,那么Math类中就应该设计4个求绝对 值的方法,分别对每种类型进行计算。在这种情况下,最好的方式就是设计4个 同名,但是不同参的方法,如下所示(请参见API帮助文档):

abs(double a)
          Returns the absolute value of a double value.
abs(float a)
          Returns the absolute value of a float value.
abs(int a)
          Returns the absolute value of an int value.
abs(long a)
          Returns the absolute value of a long value.

这就是方法重载,英文为overloading。方法重载的定义为:在一个Java类中 ,多个同名,但是不同参的方法,称为方法重载。方法重载主要能提高代码的可 读性,对方法的使用者提供便利。

说到方法重载,还有一个特别容易混淆的概念就是方法覆盖,也称为方法重 写,英文为overridding。方法覆盖是在继承时才有的概念。先从代码入手。

如父类Employee中有如下方法:

public void setSalary(double salary,double rate) {
       this.salary = salary*(1+rate);
}

假设Employee的子类Sales中,也有该业务逻辑,只不过实现方式有些不同。 假设实现方式如下:

this.salary = salary*(1+2*rate);

这种时候,就可以在子类Sales中,定义一个与父类同名同参的方法:

public void setSalary(double salary,double rate) {
       this.salary = salary*(1+2*rate);
}

这就是方法覆盖。即子类中拥有一个与父类同名同参同返回值,但是方法体 的逻辑有些区别的方法,我们就称为子类覆盖了父类某个方法。覆盖父类方法后 ,如下调用:

Sales s=new Sales();

s.setSalary(6000,0.1);

此时调用的是子类的setSalary方法,也就是说,子类Sales的对象,再也调 用不到Employee中的setSalary(double,double)方法,因为这个方法已经被 Sales重写成自己的setSalary(double,double)了。

初学者看到这个定义,往往有一个疑问。既然Sales类的setSalary方法的逻 辑有所不同,那么为什么非要定义成与父类同名的方法,不能重新命名么?如:

public void setSalesSalary(double salary,double rate) {
       this.salary = salary*(1+2*rate);
}

如果这样定义,一样能够完成新的逻辑。那么方法覆盖有意义么?

假设我们在Sales中定义了setSalesSalary方法,那么Sales中还拥有 Employee的setSalary方法:

public void setSalary(double salary,double rate) {
       this.salary = salary*(1+rate);
}

这样以来,就导致Sales类中拥有一个Sales对象不该具有的行为,这是大错 特错的。

方法覆盖的概念总结如下:

1、子类中的方法与父类的方法同名、同参、同返回值

2、子类的方法的访问权限不能缩小,只能等同或者扩大

3、子类的方法不能抛出比父类方法更多的异常类型(异常处理会在以后文章 中讲解)

方法重载,方法覆盖是两个容易混淆的概念,其实是完全没有关联的。重载 指的是一个类中,多个同名不同参的方法,而覆盖是在父类与子类中存在的概念 。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索方法
, double
, java重载
, java返回值 重载
, 子类
, value
, 初学者重载java
, java代码求讲解
, 一个
, 不同
, 重载覆盖
, java重载和覆盖
, java方法覆盖
java覆盖父类方法
,以便于您获取更多的相关知识。

时间: 2024-10-31 09:01:13

Java语言入门教程(十四):Java语言中方法重载与方法覆盖的相关文章

UWP开发入门(十四)—— UserControl中Adaptive UI的小技巧

原文:UWP开发入门(十四)-- UserControl中Adaptive UI的小技巧 本篇我们通过绘制一个非常简单的UserControl控件,来分享一下对Adaptive UI的理解及一些图形绘制的技巧. 现在流行的APP都少不了精致的用户头像,首先假设我们需要绘制如下的图形作为默认头像: <UserControl x:Class="AdaptiveUserControl.Circle0" xmlns="http://schemas.microsoft.com/w

Java 并发/多线程教程(十二)-JAVA同步块

本系列译自jakob jenkov的Java并发多线程教程,个人觉得很有收获.由于个人水平有限,不对之处还望矫正! 一个Java同步块标记一个方法或一个代码块作为同步.可以使用Java同步块来避免竞态条件. java同步关键字       在Java中同步的块被标记为Synchronized关键字.Java中的同步块在某些对象上是同步的.在同一对象上同步的所有同步块只能在同一时间内执行一个线程.所有试图进入同步块的其他线程都被阻塞,直到同步块中的线程退出该块. Synchronized关键字可以

Java语言入门教程(四):Java语言中的数据类型及String类

Java类中的主要组成部分就是数据成员和方法成员.而数据成员的声明必须指定其数 据类型,方法成员的声明也必须指定其返回值类型,如果方法有形式参数,也必须指定其 参数类型.因此,对于初学者来说,了解Java语言的数据类型是非常必要的. Java语言中的数据类型可以分为两大类,即基本数据类型(也有人称为原始类型)和 引用类型(也有人称类类型,对象类型等).Java语言是面向对象的语言,大多数数据都 是引用类型,基本类型主要为了进行数学运算.下面对这两种类型分别进行介绍. 1.基本数据类型: Java

零基础易语言入门教程(一)_易语言

易语言简介 易语言是一门以中文作为程序代码编程语言.以"易"著称.创始人为吴涛.早期版本的名字为E语言.易语言最早的版本的发布可追溯至2000年9月11日.创造易语言的初衷是进行用中文来编写程序的实践.从2000年至今,易语言已经发展到一定的规模,功能上.用户数量上都十分可观. 易语言是可视全中文易学易用的编程高级语言,近年来大家都积极求学,可是怎么学好它啦?小编带大家认识易语言,并使用易语言编写第一个教程. 方法和步骤如下所示: 1.下载易语言软件: 大家直接百度"易语言5

零基础易语言入门教程(五)之逻辑型数据类型_易语言

在上篇文章给大家介绍了零基础易语言入门教程(四)之数据类型,上篇针对数值到文本类型知识,今天给大家介绍下逻辑型数据. 具体方法和步骤如下所示: 1.逻辑型数据非真即假: 首先申请一个局部变量(A)类型为:逻辑型,编写代码为:A=1>2,那么输出的结果应为假,因等于1是赋值与1,然后代码中写道1大于2,所以这是假的,见下图所示: 2.关系运算符: 在上图大家需注意的是,A后面的等于号是赋值符号,而后面的≥,≠,<一些符号则是关系运算符. 关系运算符不是非要设置变量给其赋值才可以使用的,同样他可以

零基础易语言入门教程(二)之编程思路_易语言

易语言简介: 易语言是一门以中文作为程序代码编程语言.以"易"著称.创始人为吴涛.早期版本的名字为E语言.易语言最早的版本的发布可追溯至2000年9月11日.创造易语言的初衷是进行用中文来编写程序的实践.从2000年至今,易语言已经发展到一定的规模,功能上.用户数量上都十分可观. 上一篇跟大家讲了零基础易语言入门教程(一)编写第一个程序,然后接下来大家应该自己把支持库和易语言组件里面的控件全部认真的看一下,下面我直接跟大家分享下易语言简单编程思路. 方法和步骤如下所示: 1.易语言程序

JAVA之旅(十四)——静态同步函数的锁是class对象,多线程的单例设计模式,死锁,线程中的通讯以及通讯所带来的安全隐患,等待唤醒机制

JAVA之旅(十四)--静态同步函数的锁是class对象,多线程的单例设计模式,死锁,线程中的通讯以及通讯所带来的安全隐患,等待唤醒机制 JAVA之旅,一路有你,加油! 一.静态同步函数的锁是class对象 我们在上节验证了同步函数的锁是this,但是对于静态同步函数,你又知道多少呢? 我们做一个这样的小实验,我们给show方法加上static关键字去修饰 private static synchronized void show() { if (tick > 0) { try { Thread

Windows 8风格应用开发入门 二十四 App Bar构建

构建应用栏的目的的显示导航.命令和始终隐藏不需要的使用的工具.我们可以把应用栏放在页面 顶部或底部或同时存在顶部和底部. 默认情况在AppBar是隐藏的,当用户单击右键.按下Win+Z .或从屏幕的顶部或底部边缘轻松时可显示或关闭AppBar.当然我们也可以通过编程的方式将AppBar设 置为当用户做选择或与应用交互时显示. 构建AppBar基本步骤 通常我们构建一个应用的 AppBar,只需要三步就可以完成: 开发入门 二十四 App Bar构建-jenkins构建自由风格"> 如何构建

Android开发入门(十四)显示图像 14.2 ImageSwitcher

前面的一节,介绍了如何组合使用Gallery和ImageView.但是,有的时候当你在gallery中点击一个图片 ,你可能不希望一个图片"突然地"在imageview中显示出来.例如,你可能希望给某个图片设置一些切换动 画.此时,就需要使用ImageSwitcher和Gallery一起使用.下面展示如何使用ImageSwitcher. 1. 创 建一个工程,ImageSwitcher. 2. main.xml中的代码. <?xml version="1.0"