Java中的重写(Override)是指在子类中重新定义父类的方法,使其具有自己的实现逻辑。重写方法必须与被重写方法具有相同的名称、参数列表和返回值类型,并且访问修饰符不能比被重写方法更严格。通过重写方法,我们可以实现多态性(编译类型为父类,运行类型为子类),即在运行时根据对象的实际类型调用相应的方法。
以下是Java中重写方法的详细讲解:
访问修饰符 返回值类型 方法名 (参数列表) [throws 异常列表] {
// 方法体
}
- 访问修饰符:重写方法的访问修饰符不能比被重写方法更严格,如被重写方法是public,则重写方法可以是public或protected。(也就是说子类重写父类的方法时,子类方法的访问修饰符要大于或等于父类的访问修饰符)
- 返回值类型:重写方法的返回值类型必须与被重写方法的返回值类型相同或为其子类。
- 方法名和参数列表:重写方法的方法名和参数列表必须与被重写方法相同。
- throws 异常列表:重写方法可以抛出与被重写方法相同的异常,或者不抛出任何异常,或者是其子类的异常。
以下是一个简单的例子,展示了如何在子类中重写父类的方法:
class Animal {
public void move() {
System.out.println("动物可以移动");
}
}
class Dog extends Animal {
public void move() {
System.out.println("狗可以跑和走");
}
}
public class Test {
public static void main(String args[]) {
Animal a = new Animal(); // Animal 对象
Animal b = new Dog(); // Dog 对象
a.move(); // 执行 Animal 类的方法
b.move(); // 执行 Dog 类的方法
}
}
在上面的例子中,我们定义了一个Animal类和一个Dog类,其中Dog类继承了Animal类。Animal类中定义了一个名为move的方法,而Dog类覆盖了这个方法,并定义了自己的版本。在Test类的main方法中,我们实例化了一个Animal对象和一个Dog对象,并分别调用它们的move方法。
当执行a.move()时,由于a是一个Animal对象,因此会执行Animal类的move方法,输出"动物可以移动";而当执行b.move()时,由于b是一个Dog对象,并且Dog类重写了move方法,因此会执行Dog类的move方法,输出"狗可以跑和走"。
需要注意的是,在重写方法时,访问修饰符不能比被重写方法更严格,如被重写方法是public,则重写方法可以是public或protected;返回值类型必须与被重写方法相同或为其子类;方法名和参数列表必须与被重写方法相同。