在Java软件编程中,当你看到“重写某函数”或“覆盖某方法”时,这通常指的是在子类中定义一个与父类(或称为超类、基类)中同名、同参数列表、同返回类型(或子类返回类型是父类返回类型的子类)的方法。这种行为被称为方法重写(Method Overriding)或函数覆盖。
方法重写是面向对象编程(OOP)中的一个核心概念,它允许子类在继承父类方法的同时,根据自己的需求对方法进行修改或扩展。通过重写方法,子类可以提供更具体或更适合当前上下文的实现。
以下是一些关于方法重写的关键点:
方法签名相同:子类中的重写方法必须与父类中被重写的方法具有相同的名称、参数列表和返回类型(或子类返回类型是父类返回类型的子类)。
访问修饰符:子类中的重写方法的访问修饰符不能比父类中被重写的方法的访问修饰符更严格。例如,如果父类中的方法是public,那么子类中的重写方法也必须是public或更宽松(但通常不建议这样做)。
子类是父类的一部
异常处理:子类中的重写方法抛出的异常类型不能比父类中被重写的方法抛出的异常类型更广泛。子类方法可以抛出父类方法声明的异常,也可以不抛出任何异常,但不能抛出父类方法没有声明的异常。
调用:当通过子类对象调用一个被重写的方法时,会执行子类中的重写方法,而不是父类中的原始方法。这是多态性的一个体现。
下面是一个简单的示例来说明方法重写:
java
复制
class Animal {
void makeSound() {
System.out.println(“The animal makes a sound”);
}
}
class Dog extends Animal {
// 重写父类的makeSound方法
@Override
void makeSound() {
System.out.println(“The dog barks”);
}
}
public class Main {
public static void main(String[] args) {
Animal animal = new Animal();
animal.makeSound(); // 输出 “The animal makes a sound”
Dog dog = new Dog();
dog.makeSound(); // 输出 "The dog barks"
// 多态性示例
Animal myDog = new Dog(); // 父类引用指向子类对象
myDog.makeSound(); // 输出 "The dog barks",尽管引用是Animal类型,但实际执行的是Dog类中的方法
}
}