软件构造课程心得:重写VS重载

注:本文仅为本人上课时的一些心得体会,由于本人能力有限,文章会有很多错漏之处,还请各位谅解,欢迎指正。

  当我们谈论编程中的重写(Override)和重载(Overload)时,这两个概念经常会引起混淆。虽然它们在表面上看起来相似,但实际上它们在编程语言中具有截然不同的意义和应用。本文将深入探讨重写和重载之间的区别,并说明它们在实际编码中的应用。

重载(Overload)

  重载是指在同一个类中使用相同的方法名,但是参数列表不同的情况。这意味着同一个类中可以有多个具有相同名称但参数列表不同的方法。在调用这些方法时,编译器会根据传递给方法的参数数量或类型来确定调用哪个方法。

  以下是一个Java示例,演示了方法重载的概念:

public class Calculator {
    public int add(int a, int b) {
        return a + b;
    }

    public double add(double a, double b) {
        return a + b;
    }
}

  在这个例子中,Calculator 类有两个名为 add 的方法,一个接受两个整数参数,另一个接受两个双精度浮点数参数。这两个方法在参数类型上有所不同,但它们的功能都是执行加法运算。通过重载,我们可以使用相同的方法名称来提高代码的可读性和简洁性。

重写(Override)

  重写是指在子类中重新定义(覆盖)父类中已经存在的方法。在继承关系中,子类可以根据需要重新实现父类的方法,并且在运行时调用子类的方法而不是父类的方法。

 以下是一个Java示例,演示了方法重写的概念:

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");
    }
}

  在这个例子中,Animal 类有一个名为 makeSound 的方法,而 Dog 类继承了 Animal 类,并且重写了 makeSound 方法。当调用 makeSound 方法时,如果对象是 Dog 类的实例,则会调用 Dog 类中重写的方法,而不是父类 Animal 中的方法。

区别总结

在这里插入图片描述

  • 重载是在同一个类中创建多个方法,它们具有相同的名称但不同的参数列表。
  • 重写是子类重新定义(覆盖)父类中已经存在的方法,以提供新的实现。
  • 重载是编译时多态(静态绑定),而重写是运行时多态(动态绑定)。
  • 重载可以在同一个类中实现,而重写涉及到继承关系,子类重写父类的方法。

  考虑一个汽车类(Car)和它的子类,轿车类(Sedan)。

class Car {
    public void drive() {
        System.out.println("Car is being driven");
    }

    public void start() {
        System.out.println("Car engine started");
    }
}

class Sedan extends Car {
    // 重写父类方法
    @Override
    public void start() {
        System.out.println("Sedan engine started with a button");
    }

    // 重载父类方法
    public void drive(int speed) {
        System.out.println("Sedan is being driven at " + speed + " km/h");
    }
}

  在上面的代码中,我们有一个Car类和一个Sedan类,SedanCar的子类。

  1. 重写(Override)

    Sedan类重写了Car类的start方法。在Car类中,start方法以一种方式启动汽车引擎,但是Sedan类中的start方法重新定义了这种行为,使用了一个按钮来启动引擎。这就是重写的概念,子类重新实现了父类中已有的方法以提供新的实现。

  2. 重载(Overload)

    Sedan类中还有一个名为drive的方法,该方法接受一个speed参数。这个方法与Car类中的drive方法不同,因为它接受了一个额外的参数。即使方法名称相同,但由于参数列表不同,所以这两个方法是重载关系。这就是重载的概念,相同的方法名,但是参数列表不同。

  在实际使用中,当我们调用这些方法时,编译器会根据方法的参数列表来确定调用哪个方法。如果我们调用start方法,将会调用Sedan类中的重写版本;而如果我们调用drive方法,则根据参数的类型和数量来决定是调用Sedan类中的重载版本还是继承自Car类的版本。

  总的来说,重载和重写是面向对象编程中常见的概念,它们有助于提高代码的灵活性和可维护性。理解它们之间的区别对于编写高质量的代码至关重要。

  • 15
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值