首页后端开发JAVAjava重写与重载详解和区别

java重写与重载详解和区别

时间2023-11-30 04:10:02发布访客分类JAVA浏览538
导读:在Java编程中,有时候需要在一个类中定义多个同名的方法,但是传入的参数不同,或者函数体不同。这时候就需要用到Java中的重写(Override)和重载(Overload)。重写(Override)重写是指子类对父类中已有的方法进行重新编写...

在Java编程中,有时候需要在一个类中定义多个同名的方法,但是传入的参数不同,或者函数体不同。这时候就需要用到Java中的重写(Override)和重载(Overload)。

重写(Override)

重写是指子类对父类中已有的方法进行重新编写的过程。在Java中,子类可以重新定义父类中有相同名称、相同形式参数列表和相同返回类型的方法。重写方法应该与原方法具有相同的访问修饰符。当调用一个重写的方法时,Java虚拟机总是优先查找对象的实际类型。如果查找到子类中存在重写的方法则执行子类中的方法,否则才会执行父类中的该方法。

public class Animal {
public String move() {
    return "Animal Can Move";
}
}
public class Cat extends Animal {
public String move() {
    return "Cat Can Move";
}
}
public static void main(String[] args) {
    Animal animal = new Animal();
    Animal cat = new Cat();
    System.out.println(animal.move());
    System.out.println(cat.move());
}

输出结果:

Animal Can MoveCat Can Move

可以看出,在调用cat对象的move()方法时,由于Cat类中覆盖了父类的move()方法,所以执行的是Cat类中的方法。

重载(Overload)

重载是指在一个类中定义有多个方法,它们都有相同的名字,但是参数个数或参数类型不同,Java编译器根据不同的参数类型和个数生成不同的字节码。重载方法的返回类型可以相同,也可以不同,不能根据返回类型是否相同来判断方法是否重载。不过,一般情况下,我们不会只通过返回类型的不同来完成重载,因为这么做是没有意义的,Java编译器在编译时会根据不同的参数类型生成不同的字节码,如果只是返回类型不同,那么它们都不会被调用。

public static void print(int i) {
    System.out.println(i);
}
public static void print(int i,String s) {
    System.out.println(i+" "+s);
}
    

这里我们定义了两个print()方法,一个是只有一个int类型参数,另一个是一个int类型参数和一个String类型参数。当我们调用print()方法时会被正确的匹配:

print(1);
    //输出1print(1,"test");
    //输出1 test

通过上面的例子,可以看到Java编译器在选择不同的方法时,根据传递的参数类型和参数个数来进行区分。

重写与重载的区别

  1. 重写方法的方法名、参数列表、返回类型都必须与被重写方法保持一致,而重载方法则只需要方法名相同,但参数列表和返回类型可以不相同。
  2. 重写方法必须在子类中定义,而重载方法可以在同一个类中定义。
  3. 重写方法是运行时多态性的一种表现,而重载方法是编译时多态性的体现。
  4. Java运行时是根据对象的实际类型来判断要调用哪个方法的,而编译时则是根据方法的参数类型和顺序来判断要调用的方法。

通过上面这些区别,我们可以更好的理解重写和重载在Java编程中的应用,也可以更好地使用它们来满足我们实际的编程需求。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: java重写与重载详解和区别
本文地址: https://pptw.com/jishu/561373.html
java里面变量和常量 Java重写和方法覆盖

游客 回复需填写必要信息