当前位置:首页 > Java

java方法如何重写

2026-03-24 23:55:11Java

Java方法重写的基本概念

方法重写(Override)是面向对象编程中多态性的重要体现,指子类重新定义父类中已有的方法。重写的方法必须与被重写方法具有相同的方法签名(名称、参数列表)和返回类型。

方法重写的规则

子类重写父类方法时需遵循以下规则:

  • 方法名、参数列表必须完全相同
  • 返回类型可以是父类方法返回类型的子类(协变返回类型)
  • 访问修饰符不能比父类更严格(public > protected > default > private)
  • 不能抛出比父类方法更宽泛的检查型异常
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  // 明确表示这是重写方法
    public void move() {
        System.out.println("猫会跳");
    }
}

不能重写的情况

以下情况不能实现方法重写:

  • 父类中声明为final的方法
  • 父类中声明为static的方法(实际是隐藏而非重写)
  • 父类的私有方法(private修饰)

重写与重载的区别

方法重写与方法重载(Overload)不同:

  • 重写发生在继承关系中,要求方法签名相同
  • 重载发生在同一类中,要求方法名相同但参数列表不同
  • 重写是多态的表现,重载是编译时多态
class Calculator {
    // 方法重载示例
    int add(int a, int b) { return a + b; }
    double add(double a, double b) { return a + b; }
}

动态绑定机制

Java通过动态绑定实现方法重写的多态特性。在运行时,JVM会根据实际对象的类型调用相应的方法实现,而非引用变量的类型。

Animal myDog = new Dog();
myDog.move();  // 输出"狗可以跑和走",而非父类方法

协变返回类型

Java5开始支持重写方法的返回类型可以是父类方法返回类型的子类,这称为协变返回类型。

java方法如何重写

class Fruit {}
class Apple extends Fruit {}

class Basket {
    Fruit getFruit() { return new Fruit(); }
}

class AppleBasket extends Basket {
    @Override
    Apple getFruit() { return new Apple(); }
}

标签: 重写方法
分享给朋友:

相关文章

vue实现懒加载的方法

vue实现懒加载的方法

Vue 实现懒加载的方法 路由懒加载 通过动态导入语法拆分路由组件,减少初始加载时间。适用于 Vue Router 配置: const routes = [ { path: '/home…

jquery 方法

jquery 方法

jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画和 Ajax 交互。以下是一些常用的 jQuery 方法及其用途: 选择器方法 $("selec…

vue实现打印的方法

vue实现打印的方法

使用window.print()实现打印 在Vue中可以直接调用浏览器的window.print()方法触发打印功能。这种方法简单直接,但会打印整个页面内容。 methods: { printP…

vue轮播图实现方法

vue轮播图实现方法

使用Swiper插件实现 安装Swiper及相关Vue组件库 npm install swiper vue-awesome-swiper 基础轮播图组件示例 <template>…

react如何调用方法里的参数

react如何调用方法里的参数

在React中调用方法里的参数 在React中,可以通过多种方式在方法中传递和调用参数。以下是几种常见的方法: 通过事件处理函数传递参数 在事件处理函数中,可以通过箭头函数或bind方法来传递参数。…

react父组件如何调用子组件的方法

react父组件如何调用子组件的方法

使用 ref 直接调用子组件方法 在父组件中通过 useRef 或 createRef 创建 ref,并将其传递给子组件。子组件需要使用 forwardRef 和 useImperativeHandl…