方法重写(Override)是Java面向对象编程中实现多态的核心机制,通过子类重新定义父类非private、非static、非final方法,在运行时根据对象实际类型调用对应方法,从而提升代码的扩展性、灵活性和可维护性。
方法重写的原理方法重写的作用- 实现多态:同一操作作用于不同对象时产生不同结果。例如,父类引用指向不同子类对象时,调用重写方法会执行子类的特定逻辑。
- 增强行为定制能力:子类可根据需求修改父类方法行为,无需修改父类代码,符合开闭原则(对扩展开放,对修改关闭)。
- 统一接口调用:通过父类引用调用重写方法,简化高层代码设计。例如,框架中定义父类接口,具体逻辑由子类实现,降低代码耦合度。
- 支持框架设计:许多框架(如Spring、Servlet)利用重写机制提供钩子方法(hook method),允许用户自定义逻辑。例如,Servlet中的doGet()/doPost()方法可被重写以实现特定功能。
方法重写的规则示例与扩展- 多态示例:class Shape { void draw() { System.out.println("Drawing shape"); } }class Circle extends Shape { @Override void draw() { System.out.println("Drawing circle"); } }Shape s = new Circle();s.draw(); // 输出 "Drawing circle"通过父类引用s调用重写方法,实际执行子类Circle的逻辑。
- 协变返回类型示例:class Parent { Parent clone() { return new Parent(); } }class Child extends Parent { @Override Child clone() { return new Child(); } // 返回类型为Parent的子类}
总结方法重写通过动态绑定和多态机制,使Java程序能够以统一的方式处理不同子类的特定行为,显著提升代码的灵活性和可扩展性。严格遵守重写规则可避免潜在错误,确保多态行为的正确性。理解并合理应用方法重写,是编写高质量Java程序的关键。