如何实现Java重写
Java 方法重写的基本规则
方法重写(Override)是面向对象编程中多态性的重要体现,需满足以下条件:
- 子类方法名、参数列表必须与父类被重写方法完全一致
- 子类方法返回类型应与父类方法相同或是其子类型(协变返回类型)
- 子类方法访问修饰符不能比父类更严格(public > protected > default > private)
- 被重写方法不能是final或static方法
class Animal {
public void move() {
System.out.println("动物可以移动");
}
}
class Dog extends Animal {
@Override // 推荐使用注解明确标识
public void move() {
System.out.println("狗可以跑和走");
}
}
使用@Override注解的重要性
添加@Override注解能带来编译时检查:

- 确保确实是重写父类方法而非意外创建新方法
- 当父类方法签名变更时,子类会立即报错
- 提高代码可读性,明确表达设计意图
class Cat extends Animal {
@Override // 如果拼写错误如mouv(),编译器会报错
public void move() {
System.out.println("猫步轻盈");
}
}
重写与重载的区别
重写(Override)与重载(Overload)本质不同:

- 重写发生在继承关系中,要求相同方法签名
- 重载发生在同一类中,要求不同参数列表
- 重写遵循运行时多态,重载是编译时多态
class Calculator {
// 重载示例
int add(int a, int b) { return a + b; }
double add(double a, double b) { return a + b; }
// 重写示例
@Override
public String toString() { return "计算器对象"; }
}
处理异常的重写规则
重写方法时异常处理需注意:
- 子类方法可以不抛出任何异常
- 可以抛出父类方法声明异常的子类异常
- 不能抛出比父类方法更宽泛的检查型异常
class Parent {
void demo() throws IOException { /* ... */ }
}
class Child extends Parent {
@Override
void demo() throws FileNotFoundException { // FileNotFoundException是IOException子类
/* ... */
}
}
协变返回类型的应用
Java5+支持返回类型协变:
- 子类重写方法可返回父类方法返回类型的子类
- 适用于方法返回对象类型的情况
class ShapeFactory {
Shape create() { return new Shape(); }
}
class CircleFactory extends ShapeFactory {
@Override
Circle create() { // Circle是Shape子类
return new Circle();
}
}





