📜  java中的重载和覆盖(1)

📅  最后修改于: 2023-12-03 14:42:59.398000             🧑  作者: Mango

Java中的重载和覆盖

在Java中,方法可以通过两种方式进行多态性的实现:重载和覆盖。本文将向大家详细介绍Java中的方法重载和方法覆盖。

方法重载

方法重载指的是在同一个类中,可以有多个方法名相同但参数列表不同的方法。这些方法被称为重载方法,它们可以拥有不同的返回类型、访问修饰符和异常列表。

重载方法的规则

方法重载需要满足以下的规则:

  • 重载方法必须在同一个类中。
  • 重载方法的方法名必须相同。
  • 重载方法的参数类型或参数个数必须不同。
  • 重载方法的返回类型可以相同也可以不同。
  • 重载方法的访问修饰符可以相同也可以不同。
  • 重载方法可以具有不同的异常列表。

下面是一个方法重载的例子:

public class OverloadDemo {
    public void print(int num) {
        System.out.println("This is an integer number: " + num);
    }
    
    public void print(double num) {
        System.out.println("This is a double number: " + num);
    }
    
    public void print(String str) {
        System.out.println("This is a string: " + str);
    }
}
方法覆盖

方法覆盖指的是在子类中可以重新定义从父类中继承来的方法。子类重写的方法和父类的方法具有相同的方法名、参数列表和返回类型。

方法覆盖的规则

方法覆盖需要满足以下的规则:

  • 子类中重新定义的方法和父类的方法具有相同的方法名、参数列表和返回类型。
  • 子类中重新定义的方法的访问修饰符必须大于或等于父类的访问修饰符。
  • 子类中重新定义的方法可以抛出与父类方法一样的异常或者父类方法抛出异常的子类。

下面是一个方法覆盖的例子:

public class Animal {
    public void move() {
        System.out.println("Animal can move");
    }
}

public class Dog extends Animal {
    public void move() {
        System.out.println("Dog can move");
    }
}

在这个例子中,子类Dog覆盖了父类Animal中的方法move()。在子类中重新定义的方法中,我们输出了“Dog can move”字符串,而不是从父类中继承来的“Animal can move”字符串。

区别

方法重载和方法覆盖是Java中实现多态性的两种方式。它们之间的区别如下:

  • 方法重载是在同一个类中定义多个方法名相同但参数列表不同的方法;而方法覆盖是子类中重新定义从父类中继承来的方法。
  • 方法重载是编译时多态,而方法覆盖是运行时多态。
  • 方法重载的返回类型、访问修饰符和异常列表可以不同,而方法覆盖必须具有相同的返回类型、访问修饰符和异常列表。
  • 方法重载不能在继承体系中产生多态性,而方法覆盖可以产生多态性。

以上便是Java中的方法重载和方法覆盖的详细介绍。掌握了这两种方法的区别和使用,可以帮助我们更好地应对Java编程中的多态性需求。