在Java中,"重载"(overloading)和"重写"(overriding)是两个重要的概念,它们都涉及到方法的定义,但有着不同的应用场景和规则。
重载 (Overloading)
- 发生位置:重载发生在同一个类中。
- 方法签名:重载的方法必须有不同的方法签名。方法签名包括方法名和参数列表(参数的数量、类型或顺序)。返回类型不构成方法签名的一部分,因此仅改变返回类型不足以构成重载。
- 访问修饰符:可以不同,因为访问修饰符不是方法签名的一部分。
- 作用:允许使用相同的方法名执行不同的操作,只要参数列表不同即可。
- 编译时/运行时:重载是在编译时解析的,也称为静态绑定或早期绑定。
示例:
public class Calculator {
public int add(int a, int b) { ... } // 方法1
public double add(double a, double b) { ... } // 方法2,重载了方法1
}
重写 (Overriding)
- 发生位置:重写发生在子类中,是对父类已有的方法提供新的实现。
- 方法签名:重写的方法必须有完全相同的方法签名,包括方法名、参数列表以及返回类型(从Java 5开始,返回类型可以是父类返回类型的子类型,这被称为协变返回类型)。
- 访问修饰符:子类中的方法不能比父类中的方法更私有。例如,如果父类方法是
public,那么子类中的方法也必须是public。 - 作用:允许子类修改继承自父类的行为。
- 编译时/运行时:重写是在运行时解析的,也称为动态绑定或晚期绑定。
示例:
public class Parent {
public void greet() { System.out.println("Hello from Parent"); }
}
public class Child extends Parent {
@Override
public void greet() { System.out.println("Hello from Child"); } // 重写了Parent类的greet方法
}
总结来说,重载是关于在同一个类中定义多个具有相同名称但不同参数列表的方法,而重写是关于在子类中为继承的方法提供新的实现。
当前文章价值7.86元,扫一扫支付后添加微信提供帮助!(如不能解决您的问题,可以申请退款)

评论已关闭!