【Java】方法重写

在Java中,重写(Overriding)是面向对象编程中的一个概念,它是指子类重新定义了父类的方法。重写方法必须具有相同的方法名、参数列表以及返回类型。重写也被称为方法重写或者方法覆盖。

一、

重写的主要目的是:

  1. 使子类能够根据需要改变方法的行为。
  2. 覆盖父类的方法,以便实现子类特有的逻辑。

重写的规范:

  1. 在继承中存在
  2. 子类重写父类的方法(private方法不能被重写)
  3. 方法头不能变,只能重写方法体中的内容(逻辑)
  4. 方法头不能变:如修饰符、参数列表、方法名、返回值类型
  5. 静态方法不能被重写:只有实例方法(非静态方法)可以被重写。静态方法属于类本身,而不是类的实例,因此不能被继承或重写。

  6. final方法不能被重写:如果父类中的方法被声明为final,那么子类无法重写该方法。

以下是一个代码示例:

class Animal {
    void speak() {
        System.out.println("The animal speaks.");
    }
}

class Dog extends Animal {
    @Override
    void speak() {
        System.out.println("The dog barks.");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal myAnimal = new Dog();
        myAnimal.speak(); // 输出:The dog barks.
    }
}

在这个例子中,Dog 类重写了 Animal 类的 speak 方法。当我们创建一个 Dog 类的实例,并将其向上转型为 Animal 类型时,调用 speak 方法将执行 Dog 类的实现,这就是重写的效果。

二、

重写和重载的区别:

  1. 定义不同:重载是定义相同的方法名,参数不同;重写是子类重写父类的方法。
  2. 范围不同:重载是在一个类中,重写是子类与父类之间的。
  3. 多态不同:重载是编译时的多态性,重写是运行时的多态性。
  4. 返回不同:重载对返回类型没有要求,重写要求返回类型与被重写方法的返回类型相同或是其子类。
  5. 参数不同:重载的参数个数、参数类型、参数顺序可以不同,重写要求父子方法参数必须相同。
  6. 修饰不同:重载对访问修饰没有特殊要求,重写访问修饰符的限制一定要大于被重写方法的访问修饰符。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值