方法重载和方法重写
2021/4/25 18:26:34
本文主要是介绍方法重载和方法重写,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
导航
- 方法重载 (Overload)
- 使用场景
- 常见注意事项
- 方法重写 (Override)
- 使用场景
- 常见注意事项
- 区别
方法重载 (Overload)
方法重载指同一个类中定义的多个方法之间的关系,满足下列条件的多个方法相互构成重载
- 多个方法在同一个类中
- 多个方法具有相同的方法名
- 多个方法的参数不相同,类型不同或者数量不同
简单的说就是每个被重载的方法必须有独一无二的参数列表。
使用场景
方法重载一个常见的使用场景就是类构造器。因为构造器方法名肯定是与类名相同,所以一个类中只会有一个构造器名。但是很多时候你都需要通过不同的方式创建一个对象,这个时候就需要使用到方法重载。
例如 HashMap 的构造器,代码示例:
public HashMap() { // 忽略内容 } public HashMap(int initialCapacity) { // 忽略内容 } public HashMap(int initialCapacity, float loadFactor) { // 忽略内容 }
常见注意事项
当然下面的代码也是可行的,但是并不建议这样做,这样会导致代码难以维护等问题。如果你这样做了,回家的路上请小心。
public static void print(int a, String b) { System.out.println("int " + a + " ,String " + b); } /** 参数顺序不同 */ public static void print(String a, int b) { System.out.println("String " + a + " ,int " + b); }
如果你仔细阅读了上文,你会发现不能通过区分返回值来重载方法。
/** 这个方法会出现错误:已经在当前类定义过 */ public static void print(int a, String b) { System.out.println("int " + a + " ,String " + b); } public static String print(int a, String b) { System.out.println("int " + a + " ,String " + b); }
因为在调用的时候虚拟机可以通过参数的不同来区分同名的方法,但是在代码编写过程中,你可能会忽略方法的返回值的接收,使用下面代码来调用一个有返回值的方法,这时候虚拟机就不能确定你想调用的是同名方法中的哪一个。
print(1, "abc");
方法重写 (Override)
方法重写指子类中出现了和父类中一模一样的方法声明。
使用场景
当子类需要父类的功能,而子类又有自己特有内容时,可以重写父类中的方法,这样,即沿袭了父类的功能,又定义了子类特有的内容。
public class Fruit { public void show() { System.out.println("可以吃"); } } public class Apple extends Fruit { @Override public void show() { System.out.println("变得红彤彤"); super.show(); } }
常见注意事项
- 父类的私有方法不能被重写
- 子类方法的访问权限不能比父类中被重写的方法的访问权限更低
- 声明为 final 的方法不能被重写
- 构造方法不能被重写
区别
区别点 | 方法重载 | 方法重写 |
---|---|---|
参数列表 | 必须不同 | 必须相同 |
返回类型 | 可以不同 | 必须相同 |
异常 | 可以不同 | 可以减少或删除,一定不能抛出新的或者更广的异常 |
访问 | 可以不同 | 不能降低访问限制 |
这篇关于方法重载和方法重写的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-24怎么修改Kafka的JVM参数?-icode9专业技术文章分享
- 2024-12-23线下车企门店如何实现线上线下融合?
- 2024-12-23鸿蒙Next ArkTS编程规范总结
- 2024-12-23物流团队冬至高效运转,哪款办公软件可助力风险评估?
- 2024-12-23优化库存,提升效率:医药企业如何借助看板软件实现仓库智能化
- 2024-12-23项目管理零负担!轻量化看板工具如何助力团队协作
- 2024-12-23电商活动复盘,为何是团队成长的核心环节?
- 2024-12-23鸿蒙Next ArkTS高性能编程实战
- 2024-12-23数据驱动:电商复盘从基础到进阶!
- 2024-12-23从数据到客户:跨境电商如何通过销售跟踪工具提升营销精准度?