重写vs重载
方法重写和方法重载是一些编程语言中的两个概念/技术/特性。这两个概念都允许程序员为同名的方法提供不同的实现。方法重写允许程序员在子类中为已经在其超类中定义的方法提供另一种实现。方法重载允许程序员为具有相同名称(在同一个类中)的多个方法提供不同的实现。
什么是压倒性的?
如上所述,在面向对象编程语言中,类可以扩展超级类或父类。子类可以有自己的方法,也可以选择对父类(或其一个父类)中已定义的方法有自己的实现。因此,当后者发生时,称为方法重写。换句话说,如果子类提供了一个方法的实现,该方法的签名和返回类型与父类中已定义的方法相同,则该方法将被子类的实现覆盖(替换)。因此,如果类中存在重写的方法,运行时系统将必须决定使用哪个方法实现。通过查看用于调用它的对象的确切类型,可以解决此问题。如果父类的对象用于调用重写的方法,则使用父类中的实现。类似地,如果它是使用的子类的对象,则使用子类的实现。现代编程语言如java、Eifell、C++和Python允许方法覆盖。
什么是超载?
方法重载是一些编程语言提供的一种功能,用于创建多个具有相同名称但具有不同输入和输出类型的方法。在现代编程语言中,如java、C++、C++和VB.NET版,此功能可用。可以通过创建另一个名称相同但方法签名不同或返回类型不同(或两者都有)的方法重载方法。例如,如果method1(type1t1)和method1(type2t2)在同一个类中,那么它们将重载。然后系统将必须决定在调用它时要执行哪一个。这种区别是通过查看传递给方法的参数类型来实现的。如果参数是类型1,则调用第一个实现;如果参数是类型2,则调用第二个实现。
重写和重载之间有什么区别?
虽然方法重写和方法重载用于提供具有不同实现的方法,但这两个概念/技术之间存在关键区别。首先,方法重写的主题始终位于不同的类中,而方法重载的主题则位于同一个类中。这意味着重写只能在允许继承的面向对象编程语言中实现,而重载也可以在非面向对象语言中使用。换句话说,您重写了超类中的方法,但在自己的类中重载了方法。