重载和覆盖之间的区别 | 重载与覆盖
已发表: 2021-06-15目录
介绍
面向对象编程在软件开发领域发挥着重要作用。 有几个概念与这种类型的编程相关联,例如类、对象、多态性、继承、数据抽象、通用编程和异常处理。
开发人员总是发现多态性的概念非常有趣,它具有方法重载、方法覆盖等子概念。但是,要更好地理解多态性的概念,必须了解重载和覆盖之间的区别。
方法重载和方法覆盖之间的区别
方法重载和方法覆盖之间存在很多差异。 java中方法重载和覆盖之间的区别列表如下:
方法重载 | 方法覆盖 | |
1 | 该方法用于增加程序的可读性。 | 该方法用于提供超类提供的方法的实现。 |
2 | 它在一个班级内进行 | 发生在具有 IS-A(继承)关系的两个类中。 覆盖需要基类和子类。 |
3 | 方法或函数必须具有相同的名称和不同的签名。 | 方法或函数必须具有相同的名称和相同的签名。 |
4 | 该方法中使用的参数应该不同。 | 在方法覆盖的情况下应该使用相同的参数。 |
5 | 它是编译时多态性的一个例子。 重载方法调用与其定义的绑定发生在编译时。 | 这是运行时多态性的一个例子。 重写方法调用与其定义的绑定发生在运行时。 |
6 | 仅通过更改返回类型,无法进行方法重载。 返回类型可能不同也可能相同。 但是,参数应该不同。 | 方法覆盖中的返回类型可能相同或协变。 |
7 | 方法重载可能应用于静态方法。 这意味着一个类可以有多个同名的静态方法。 | 方法覆盖不能应用于静态方法。 |
8 | 静态绑定被用于方法重载。 | 动态绑定被用于方法覆盖。 |
9 | 方法重载可以提供更好的性能。 | 与方法重载相比,性能较差。 原因是重写方法的绑定是在运行时完成的。 |
10 | 私有和最终方法可以重载。 一个类可以有多个同名的私有/最终方法。 | 私有和最终方法不能被覆盖。 子类不能覆盖其基类的私有/最终方法。 |
11 | 在方法重载的情况下可能需要也可能不需要继承。 | 在方法覆盖的情况下总是需要继承。 |
12 | 它用于为方法的行为添加更多内容。 | 它用于更改现有方法的行为。 |
13 | 在方法重载中不需要存在多个类。 | 在方法覆盖中总是需要至少两个类。 |
14 | 如果重载中断,就会出现编译时错误,并且很容易修复。 | 如果覆盖中断,它可能会在我们的程序中导致严重的问题,因为效果将在运行时可见。 |
15 | 方法重载必须具有不同的签名。 | 方法覆盖必须具有相同的签名。 |
16 | 重载方法中的访问修饰符可以是任何东西,也可以是不同的。 | 子类方法的访问修饰符必须与覆盖方法中的超类方法访问修饰符相同或更高。 |
17 | 抛出的异常可以是方法重载概念中的任何东西。 | 在方法覆盖中,抛出的未经检查的异常可以是任何东西。 对于检查的异常,重写方法不应抛出任何新的或比重写方法声明的异常更广泛的异常。 |
18 | 编译器总是根据引用类型来处理方法解析。 | JVM 负责基于运行时对象的方法解析。 |
从世界顶级大学在线学习软件课程。 获得行政 PG 课程、高级证书课程或硕士课程,以加快您的职业生涯。
接下来是什么?
如果您有兴趣了解有关全栈软件开发的更多信息,请查看 upGrad 和 IIIT-B 的全栈软件开发执行 PG 计划,该计划专为在职专业人士设计,提供 500 多个小时的严格培训、9 个以上的项目和任务、IIIT-B 校友身份、实用的实践顶点项目和顶级公司的工作协助。
什么是运行时多态性?
运行时多态是一种涉及动态类型的多态。 这意味着对象可以像单一类型一样被操作。 这类似于静态多态性,其中对象的操作就像它们具有单一类型一样,而不管它们的底层类型如何。 它是五个主要的软件设计原则之一。 它与面向对象的编程一起使用。 这意味着变量可以根据运行时条件引用不同的对象。 例如,一个变量可能在声明变量时用于引用Dog对象,但在程序执行期间,该变量可能引用Cat对象。 它是一种自动类型转换。 例如,如果你有一个整数变量 i,并且你给它赋值一个字符串值,它就会变成一个字符串变量。
重载与重载有何不同?
我们可以覆盖重载的方法吗?
重载方法与常规方法相同(就参数的数量和类型而言),但不同之处在于重载方法的编写方式可以接受与常规方法不同类型的参数。 您可以像覆盖常规方法一样覆盖重载方法。