千锋教育-做有情怀、有良心、有品质的职业教育机构

手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

当前位置:首页  >  千锋问问  > java的重载和重写

java的重载和重写

匿名提问者 2023-04-07 16:58:19

我要提问

推荐答案

  Java 中的重载(Overloading)和重写(Overriding)是两种不同的概念,用于实现不同类型的多态性。

  重载(Overloading):

  重载指的是在同一个类中定义了多个方法,它们具有相同的方法名但不同的参数列表。参数列表包括参数的个数、类型或顺序,但不能仅仅是返回类型不同。编译器通过根据方法调用时传递的参数数量、类型或顺序来选择相应的方法进行调用。重载方法之间的区分是在编译时确定的。

  例如:

public class MyClass {
public void print(int num) {
System.out.println("int: " + num);
}

public void print(String str) {
System.out.println("String: " + str);
}

public void print(double num1, double num2) {
System.out.println("double: " + num1 + ", " + num2);
}
}

   在上面的例子中,MyClass 类中定义了三个名为 print 的方法,它们的参数列表不同,分别接受一个 int、一个 String 和两个 double 类型的参数,这就是方法的重载。

  重写(Overriding):

  重写指的是子类重新定义了父类中具有相同方法名、方法签名(包括方法名、参数列表和返回类型)的方法。在继承关系中,子类可以对父类中的方法进行覆盖,使得在子类对象调用该方法时执行子类中的实现逻辑,而不是父类中的实现逻辑。重写是运行时多态性的一种体现,因为在运行时根据对象的实际类型来决定调用哪个方法。

  例如:

public class Animal {
public void makeSound() {
System.out.println("Animal makes sound");
}
}

public class Cat extends Animal {
@Override
public void makeSound() {
System.out.println("Cat makes meow");
}
}

public class Dog extends Animal {
@Override
public void makeSound() {
System.out.println("Dog makes woof");
}
}

   在上面的例子中,Animal 类定义了一个名为 makeSound 的方法,Cat 和 Dog 类继承自 Animal 类,并分别重写了 makeSound 方法。当创建 Cat 对象调用 makeSound 方法时,会执行 Cat 类中的实现逻辑;当创建 Dog 对象调用 makeSound 方法时,会执行 Dog 类中的实现逻辑。这就是方法的重写。

其他答案

  •   Java 中的方法重载(Overloading)是指在同一个类中可以定义多个方法,它们具有相同的方法名但参数列表不同(包括参数的个数、类型或顺序)。编译器通过根据方法调用时传递的参数来选择相应的方法进行调用。方法重载的特点包括:方法名相同:在同一个类中,可以定义多个方法,它们的方法名相同。参数列表不同:重载的方法必须有不同的参数列表,包括参数的个数、类型或顺序,至少有一个参数不同。返回类型不同不足以构成重载:仅仅返回类型不同的方法不能构成重载,因为编译器无法根据返回类型来确定调用哪个方法。

  •   Java 中的方法重写(Overriding)是指子类重新定义了父类中具有相同方法名、方法签名(包括方法名、参数列表和返回类型)的方法。在继承关系中,子类可以对父类中的方法进行覆盖,使得在子类对象调用该方法时执行子类中的实现逻辑,而不是父类中的实现逻辑。方法重写的特点包括:方法名、参数列表和返回类型相同:子类重写的方法必须与父类中被重写的方法具有相同的方法名、参数列表和返回类型。修饰符不能更加严格:子类重写的方法的访问修饰符不能比父类中被重写的方法的访问修饰符更加严格,例如,如果父类中的方法为 public,那么子类中的重写方法也必须为 public。子类抛出的异常不能比父类更多:子类重写的方法不能抛出比父类中被重写的方法更多的异常,可以抛出相同的异常或者不抛出异常。方法体覆盖:子类重写的方法需要提供新的实现逻辑,即子类中的方法体会覆盖父类中的方法体。