关于重载与重写

1.重载

背景:需求,在一个类中,已经实现了两个整数数组int ,求和

【重载的含义】:

在java中,如果有功能类似,可以使用相同名字来定义不同功能方法;

所谓功能不同不是主体不同,而是参数参数不同。

参数不同包括:数量,类型,顺序不同

在方法调用的时候,编译器是如何知道调用的是哪一个方法呢?

虚拟机会根据语言环境,如参数的类型,个数,顺序,找到指定的方法进行。

其实是只要参数能够跟形式参数进行匹配,就会找到对应的方法。

定义重载方法的时候

【要求】:

(1)方法的名字必须相同,作用域必须相同

(作用域的理解 https://www.cnblogs.com/yishuangboyi/p/6504980.html

(2)方法的参数必须不同(数量,类型,顺序)

【注意,以下不能构成重载】:

(1)只有变量名不同的方法

(2)不同作用域下的同名方法

(3)只有返回值不同(如方法名前面的类型)

主要判断虚拟机的语言环境,是根据传过来的实际参数能不能找到形式参数

注意在使用重载时候,一定不要将功能完全不一样的方法进行重载!

会使业务逻辑和代码的可读性,应用性大大降低。

【重载的优点】:

定义端(方法的提供者):使用相同的方法来表示功能相同的方法

调用端(方法的使用者):在调用的时候,可以使用相同的名字方法实现不同的功能

重载时多态性的体现

注意,定义为int类型的变量在调用函数时,如果找不到对应的方法,会向上转型选择float、double类型的重载

2.重写

【定义】:在子类继承父类以后,可以对父类中同名同参数的方法,进行覆盖操作。

【应用】:重写以后,当创建子类对象以后,通过子类调用父类的同名同参数的方法时,实际执行的是子类重写父类的方法

【区分方法的重载与重写】

      重载:同名不同参,必须在一个类中,与返回值类型无关

      重写:同名同参,要有继承关系

【重写的规定】:

方法的声明:

      权限修饰符 返回值类型 方法名(形参列表){ //方法体 }

      约定俗称:子类中的叫重写的方法,父类中叫被重写的方法

      ①子类重写的方法的方法名和形参列表与父类被重写的方法的方法名和形参列表相同

      ②子类重写的方法的权限修饰符不小于父类被重写的方法的权限修饰符

               不能降低可见性,大的权限覆盖小的权限

               特殊情况:子类中不能重写父类中private (权限太小了,子类看不到他)

      ③返回值类型:

               父类中被重写的方法的返回值是void,则子类重写的方法的返回值类型只能是void

               父类被重写的方法的返回值类型是A类型,则子类重写方法的类型可以是A类或A类的子类

               父类被重写 的方法的返回值类型是基本数据类型,则子类重写方法的返回值类型必须是相同的基本数据类型

      ④子类重写的方法抛出的异常类型不大于父类被重写的方法抛出的异常类型

实际开发中,直接复制粘贴.

一般来说,子类和父类的同名同参数的方法要哦都声明为非static的(考虑重写),要么都声明为static的(不是重写)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值