这个其实我们在之前的java方法那一章节里面就提到了,这里更加深入一下,并且提供具体的例子。
Java方法**重写(Override)**指的是,子类对父类的允许访问的方法(非private修饰的)的实现过程进行重新编写, 返回值和形参都不能改变。相同的方法名,相同的形参,相同的返回值,但是方法体的内容不同,即”外壳不变,核心重写“。
可以根据子类需要,定义特定于子类自己的行为。 也就是说子类能够根据需要实现父类的方法。简单打个比方,父类:动物,嘎嘎叫方法。子类:狗,嘎嘎叫方法(输出:汪汪汪)
**重写方法不能抛出新的检查异常或者比被重写方法申明更加宽泛的异常。**例如: 父类的一个方法申明了一个检查异常 IOException,但是在重写这个方法的时候不能抛出 Exception 异常,因为 Exception 是 IOException 的父类,抛出 IOException 异常或者 IOException 的子类异常。
在面向对象原则里,重写意味着可以重写任何现有方法。实例如下:
package main.method方法;
class Animal{
public void move(){
System.out.println("动物可以移动");
}
}
class Dog extends Animal{
public void move(){
System.out.println("狗可以跑和走");
}
public void mark(){
System.out.println("狗狗撒尿作为领地占有的标志");
}
}
public class Test{
public static void main(String args[]){
Animal a = new Animal(); // Animal 对象
Animal b = new Dog(); // Dog 对象 向上转型
a.move();// 执行 Animal 类的方法
b.move();//执行 Dog 类的方法
//b.mark();//这样会报错,因为b的引用类型Animal没有mark(),除非你在Animal中编写一个mark()方法,又或者说进行一个强制类型转换,把Animal类型的b转换为含有mark()方法的Dog类型即(Dog) b。
((Dog)b).mark();//调用子类Dog独有的方法之前要进行强制类型转换,即(Dog) b。向下转型
}
}
以上实例编译运行结果如下:
动物可以移动
狗可以跑和走
狗狗撒尿作为领地占有的标志
当需要在子类中调用父类的被重写方法时,要使用 super 关键字。
重载(Overlode)基本概念:
方法重载(Method Overloading)是指在”同一个类“中定义多个名称相同但参数列表不同的方法。
通过方法重载,我们可以使用相同的方法名称来实现不同的行为,方便了代码的复用和可读性。
以下是一个方法重载的示例:
public class Calculator {
public int add(int a, int b) {
return a + b;
}
public int add(int a, int b, int c) {
return a + b + c;
}
public double add(double a, double b) {
return a + b;
}
}
在上面的例子中,Calculator
类定义了三个名为 add
的方法,它们的参数列表分别为 (int, int)
、(int, int, int)
和 (double, double)
。这样,我们可以根据需要使用不同的参数调用适合的 add
方法。
例如:
Calculator cal = new Calculator();
int result1 = cal.add(2, 3); // 调用 add(int, int) 方法
int result2 = cal.add(2, 3, 4); // 调用 add(int, int, int) 方法
double result3 = cal.add(2.5, 3.7); // 调用 add(double, double) 方法
通过方法重载,我们可以为同一方法名称提供多种不同参数的实现,以便于适应实际开发中我们遇到的各种不同的使用情况和需求。
重载是一个类的多态性具体表现形式
区别点 | 重载方法 | 重写方法 |
---|---|---|
参数列表 | 必须修改 | 一定不能修改 |
返回类型 | 可以修改 | 一定不能修改 |
异常 | 可以修改 | 可以减少或删除,一定不能抛出新的或者更广的异常 |
访问 | 可以修改 | 一定不能做更严格的限制(可以降低限制) |
方法的重写(Overriding)和重载(Overloading)是java多态性的不同表现,重写是父类与子类之间多态性的一种表现,重载可以理解成多态的具体表现形式。
结尾语:记录于2023年8月2号0时46分,以上仅为个人在[Java Override和Overload](Java 重写(Override)与重载(Overload) | 菜鸟教程 (runoob.com))的学习过程中遇到的问题,还有记录的个人想法,有错误欢迎指出,希望对您有帮助,感谢观看!如果可以的话,点点赞,点点关注