方法重载和方法重写

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 的方法不能被重写
  • 构造方法不能被重写

区别

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


这篇关于方法重载和方法重写的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程