方法重载和方法重写

本文详细介绍了Java中的方法重载(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 的方法不能被重写
  • 构造方法不能被重写

区别

区别点方法重载方法重写
参数列表必须不同必须相同
返回类型可以不同必须相同
异常可以不同可以减少或删除,一定不能抛出新的或者更广的异常
访问可以不同不能降低访问限制
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Aiqian9

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

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

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

打赏作者

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

抵扣说明:

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

余额充值