Java中方法重载和重写的区别(详解)

方法重载

什么是方法重载

方法重载是让类以统一的方式处理不同类型数据的一种手段。调用方法时通过传递给它们不同个数和类型的参数决定具体使用哪个方法,体现了多态性。

重载规则

1.在同一个类中,多个方法具有相同的方法名、不同的参数列表(参数个数、参数类型、参数类型的顺序)。(同一个类中、多个方法、相同的方法名、不同的参数列表)四个条件,缺一不可!

2.方法的重载与方法的返回值类型无关

3.方法的返回值类型可以相同可以不同

实现理论

重载解析:由于Java允许在一个类中,多个方法拥有相同的名字。当方法名称相同时,编译器会根据调用方法的参数个数、参数类型去逐个匹配,以选择对应的方法,如果匹配失败,则编译器报错。

方法重载的意义

将具有相同行为,但功能不同的方法进行重载,通过使用同一方法名不同参数列表来提高程序的阅读性

举个简单例子:定义add方法都是进行加法这个行为,但是到底是几个数相加,就需要方法重载来实现

方法重载注意点

1.方法里包含从父类继承而来的方法(既然继承了过来,就在同一个类)

2.方法之间需要存在一定的联系,因为这样可以提高程序的阅读性,一般只重载功能相似的方法!

3.不仅是一般的方法,构造方法也可以重载(毕竟构造方法也属于方法,是方法就可以重载)。


方法重写

什么是方法重写

子类可以定义新的特征,当子类需要修改父类的方法进行一些扩展(增加功能),程序设计者通常把这样的一种操作手段称为方法重写,也可以叫作方法覆写或覆盖。

重写规则

1.方法名必须相同

2.参数列表必须相同

3.返回值类型:父类的返回值类型不需要与被子类重写的方法的返回值类型相同。 例如:父类返回值类型是Supclass,子类的重写方法的返回值类型可以是Subclass,也同样构成重写@Override。

3.修饰符:范围可以扩大,但是不能缩小 public>protected>default>private

4.方法体的实现不同(方法体相同的重写是无意义的!)

5.抛出的异常:范围可以被缩小,但不能扩大,更不能抛出新的异常 先了解下:无法找到类异常ClassNotFoundException 其中的Exception范围特别大的 后面再去详细讲,先有个印象

方法重写的意义

父类的功能子类不一定都需要 或者 子类需要的功能父类不一定能满足,因此可以根据自己的需要重写方法,定义特定的行为的方法。

方法重写的注意点

1.重写是方法的重写,和属性无关

2.重写是建立在继承关系之上的,只存在于子父之间,子类重写父类的方法!

Idea快捷键

Alt+Insert:Override methods


权限修饰符

权限修饰符本类同包子类其它
private*
default(默认)**
protected***
public****

总结

首先要明确:方法重载和方法重写没有关系,是两个操作,规则互不干扰!

A:方法重载:

1.同一类中

2.方法名必须相同,参数列表必须不同

3.方法的返回值类型、权限修饰符任意

4.与方法的参数名无关(参数名只是个形式)

5.方法体不同

6.抛出异常:可以修改

作用时间不同:重载时编译器在编译期间就可以确定调用哪一个方法,而重写则有可能在运行期间才能确定

B:方法重写:

1.必须在具有继承关系的子类中

2.方法名和参数列表相同;方法的返回值类型可以不同

3.权限修饰符:子类的>=父类的 重写只能扩大不能缩小,即不能做更严格的限制

4.与方法的参数名无关(参数名只是个形式)

5.方法体不同(相同无意义)

6.抛出异常:可以减少或删除,一定不能抛出新的或者更广的异常


如果我的博客对你有一点点帮助,望请大侠可以给文章点个赞再走~
声明:因个人能力有限,博文中必有不足之处,望学术同仁不吝赐教!一起学习一起进步!
以上内容均为原创,转载请注明出处!


版权声明:本文为weixin_45334172原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。