10Java 方法重载和方法重写之间的区别是什么?
约 405 个字 35 行代码 预计阅读时间 2 分钟
直接回答:
重载:在同一个类中定义多个方法,它们具有相同的名字但参数列表不同。主要用于提供相同功能的不同实现。
重写:在子类中定义一个与父类方法具有相同签名的方法,以便提供子类的特定实现。主要用于实现运行时多态性。
扩展解析:
重载:指在同一个类中定义多个方法,这些方法具有相同的名字但参数列表不同(参数类型、数量或顺序不同)。
这里要注意和返回值没有关系,方法的签名是名字和参数列表,不包括返回值。
重载通常用于提供同一操作的不同实现,例如构造函数的重载、不同类型输入的处理等。
重载简单示例代码:
public class OverloadingExample {
// 重载方法:参数数量不同
public void print(int a) {
System.out.println("Printing int: " + a);
}
// 重载方法:参数类型不同
public void print(String a) {
System.out.println("Printing String: " + a);
}
// 重载方法:参数类型和数量不同
public void print(int a, int b) {
System.out.println("Printing two ints: " + a + ", " + b);
}
}
public class OverloadingExample {
// 重载方法:参数数量不同
public void print(int a) {
System.out.println("Printing int: " + a);
}
// 重载方法:参数类型不同
public void print(String a) {
System.out.println("Printing String: " + a);
}
// 重载方法:参数类型和数量不同
public void print(int a, int b) {
System.out.println("Printing two ints: " + a + ", " + b);
}
}
重写:指在子类中定义与父类方法具有相同签名(方法名、参数列表)的一个方法,方法返回类型与父类一致,或者是其子类(协变返回类型)。
且子类方法定义的访问修饰符,不能比父类更严格。例如父类方法是 protected
,那么子类方法不能是 private
,但可以是 public
。
且子类方法抛出的异常必须与父类一致,或者是其父类异常的子类。
重写通常用于在子类中提供父类方法的具体实现,以实现多态性。例如,子类对父类方法进行扩展或修改以适应特定需求。
重写简单示例代码:
class Parent {
public void display() {
System.out.println("Parent display");
}
}
class Child extends Parent {
@Override
public void display() {
System.out.println("Child display");
}
}
public class OverridingExample {
public static void main(String[] args) {
Parent obj = new Child();
obj.display(); // 输出 "Child display"
}
}