覆盖与超载
方法覆盖和方法过载是某些编程语言中发现的两个概念/技术/功能。这两个概念都使程序员可以为具有相同名称的方法提供不同的实现。方法覆盖允许程序员在子类中为其超级类中定义的方法提供替代实现。方法超载使程序员可以为具有相同名称的多个方法(在同一类中)提供不同的实现。
什么是覆盖?
如上所述,类可以在面向对象的编程语言中扩展超级类或父类。儿童类可以具有自己的方法,也可以选择自己对其父类中已经定义的方法(或其大父母之一)具有自己的实现。因此,当后者发生时,它称为方法覆盖。换句话说,如果儿童类提供了与已在其父类中已经定义的方法相同的签名和返回类型的方法实现。因此,如果类中有一个覆盖方法,则运行时系统将必须决定使用哪种方法实现。通过查看用于调用它的对象的确切类型来解决此问题。如果使用父类的对象调用被覆盖方法,则使用父类中的实现。同样,如果它是使用的子类的对象,则使用子类的实现。Java,Eifell,C ++和Python等现代编程语言允许覆盖方法。
什么是过载?
方法过载是某些编程语言提供的功能,以创建具有相同名称的多种方法,但输入类型不同。在Java,C#,C ++和VB.NET等现代编程语言中,此功能可用。您可以通过创建另一种方法与相同名称,但具有不同的方法签名或不同的返回类型(或两者)来超载。例如,如果您在同一类内有Method1(Type1 T1)和Method1(Type2 T2),则它们被超载。然后,系统将必须决定在调用哪一个时执行哪一个。通过查看将参数的类型传递给该方法,可以进行这种差异。如果该参数是类型1的,则将第一个实现称为type2,则称为第二个实现。
覆盖和超载有什么区别?
虽然,方法覆盖和方法过载用于提供具有不同实现的方法,但这两个概念/技术之间存在关键差异。首先,方法覆盖的主题始终留在不同的类中,而方法超载的主题则保持在同一类中。这意味着只有在允许继承的对象的编程语言中进行重叠,而超载也可以以非对象为导向的语言可用。换句话说,您覆盖了超级类中的一种方法,但是在自己的类中超载了一种方法。
另一个区别是,压倒方法具有相同的方法名称,方法签名和返回类型,但是超载方法在签名或返回类型上必须有所不同(名称应相同)。为了区分两种覆盖方法,用于调用使用的方法ID的确切类型的对象类型,而为了区分两个过载方法,则使用了参数的类型。另一个关键区别是,在编译时解决了过载,而在运行时则解决了覆盖。
发表评论