java如何重写
重写方法的基本概念
在Java中,重写(Override)是指子类重新定义父类中已有的方法,以实现特定的功能。重写的方法必须与被重写方法具有相同的方法名、参数列表和返回类型(或是其子类)。

重写的规则
- 方法名、参数列表必须完全相同。
- 返回类型可以是原返回类型的子类(协变返回类型)。
- 访问修饰符不能比父类方法的访问修饰符更严格(如父类方法是
protected,子类方法可以是public或protected,但不能是private)。 - 不能重写
final、static或private方法。 - 重写方法可以抛出与父类方法相同的异常,或不抛出异常,但不能抛出更宽泛的检查异常。
示例代码
class Animal {
public void makeSound() {
System.out.println("Animal makes a sound");
}
}
class Dog extends Animal {
@Override
public void makeSound() {
System.out.println("Dog barks");
}
}
public class Main {
public static void main(String[] args) {
Animal myDog = new Dog();
myDog.makeSound(); // 输出: Dog barks
}
}
使用@Override注解
在子类方法上添加@Override注解可以帮助编译器检查是否正确地重写了父类方法。如果方法签名不匹配,编译器会报错。
协变返回类型示例
子类方法的返回类型可以是父类方法返回类型的子类。
class Parent {
public Number getNumber() {
return 10;
}
}
class Child extends Parent {
@Override
public Integer getNumber() {
return 20;
}
}
注意事项
- 静态方法不能被重写,但可以隐藏(通过子类定义同名静态方法)。
- 构造函数不能重写。
- 重写方法时,子类方法的逻辑通常应与父类方法有联系,避免完全无关的实现。







