目录
🌈方法重载
🍒概述
🍧方法重载的规则
🌈方法重写
🍒概述
🍧方法重写的规则
🍰两者区别
🌈方法重载
🍒概述
重载(Overload)发生在同一个类中,有相同的函数名称,但形式参数不同的函数。
🍧方法重载的规则
- 方法名称必须相同
- 参数列表必须不同(个数不同、或类型不同、参数排列顺序不同等)
- 方法的返回类型可以相同也可以不相同
- 被重载的方法可以改变访问修饰符
- 仅仅返回类型不同不足以成为方法的重载
- Java 允许重载任何方法, 而不只是构造方法。
实现理论:
方法名称相同时,编译器会根据调用方法的参数个数、参数类型等去逐个匹配,以选择对应的方法,如果匹配失败,则编译器报错。
🌈方法重写
🍒概述
重写(Override)是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!
🍧方法重写的规则
- 方法名、参数列表必须相同
- 如果父类方法访问修饰符为 private/final/static ,则子类就不能重写该方法。但是被 static 修饰的方法能够被再次声明。
- 子类重写父类方法时,访问权限必须大于或者等于父类
- 构造方法无法被重写
- 父类的成员方法只能被它的子类重写。
子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为private和final的方法。
子类和父类不在同一个包中,那么子类只能够重写父类的声明为public和protected的非final方法。 - ⭐️ 关于重写的返回值类型:如果方法的返回类型是 void 和基本数据类型,则返回值重写时不可修改。但是如果方法的返回值是引用类型,重写时是可以返回该引用类型的子类的
例如:
总结
方法的重写要遵循“两同两小一大”原则:
1.“两同”即方法名相同、形参列表相同;
2. “两小”指的是子类方法返回值类型应比父类方法返回值类型更小或相等。子类方法声明抛出的异常类应比父类方法声明抛出的异常类更小或相等;
3. “一大”指的是子类方法的访问修饰符应比父类方法的访问权限更大或相等。🌰:如果父类的一个方法被声明为public,那么在子类中重写该方法就不能声明为protected
重写的方法能够抛出任何非强制异常,无论被重写的方法是否抛出异常。但是,重写的方法不能抛出新的强制性异常,或者比被重写方法声明的更广泛的强制性异常,反之则可以。
如果不能继承一个方法,则不能重写这个方法。
🍰两者区别
重载就是同样的一个方法能够根据输入数据的不同,做出不同的处理。
重写就是当子类继承自父类的相同方法,输入数据一样,但要做出有别于父类的响应时,就要覆盖父类方法。