方法重载和方法重写的区别是什么?

12 浏览
0 Comments

方法重载和方法重写的区别是什么?

我是IOS的新手,有人能告诉我在IOS中方法重载和方法重写的区别吗?我已经看过了这个问题,但是它是关于Java的,我想知道在IOS中的情况(如果可能的话,使用Objective-C或Swift的一些代码)\n方法重载和方法重写有什么区别?

0
0 Comments

方法重载和方法覆盖是面向对象编程中常见的概念。方法重载是指在一个类中定义多个相同名称的方法,但是它们的参数列表不同。方法覆盖是指在子类中重写父类中的方法。

在Swift中,方法重载和Java中的工作方式相同。可以在同一个类中定义多个同名的方法,通过参数的类型来区分调用哪个方法。然而,当添加额外的参数时,方法的名称实际上会改变,所以在传统意义上,这不应该被称为方法重载,但是Swift可能在某些情况下只使用名称的第一部分来区分方法,所以这实际上也可以是方法重载。

在Obj-C中,没有方法重载的概念。无法在Obj-C中声明多个同名的方法,即使参数列表不同。当改变参数的数量时,也必须改变方法的名称。然而,在Obj-C中可以使用普通的C函数,它们可以进行重载。

总结一下,方法重载和方法覆盖是面向对象编程中常见的概念。在Swift中,方法重载的工作方式与Java类似,而在Obj-C中,没有方法重载的概念。在某些情况下,Swift可能会根据方法名称的一部分来区分方法重载。而在Obj-C中,可以使用普通的C函数进行方法重载。

0
0 Comments

方法重载是指在一个类中定义多个相同名称但参数列表不同的方法。然而,在iOS中,Objective-C并不支持方法重载。因此,我们需要使用不同的方法名来实现方法重载。注意,方法名包括方法签名关键字(在“:”之前的参数名称),所以下面的两个方法虽然都以“writeToFile”开头,但它们实际上是不同的方法:

-(void) writeToFile:(NSString *)path fromIntger:(int)anInt;
-(void) writeToFile:(NSString *)path fromString:(NSString *)aString;

这两个方法的名称分别是“writeToFile:fromIntger:”和“writeToFile:fromString:”。

方法重写是一种语言特性,可以在一个子类中提供一个与父类中已有方法相同名称但实现不同的方法。子类中的实现将替换父类中的实现。当你在子类中定义一个与父类中同名的方法时,新方法将代替继承的定义。新方法必须具有与被重写的方法相同的返回类型和参数类型。

下面是一个示例:

MyClass : NSObject
- (int)myNumber;
MyClass : NSObject
- (int)myNumber {
    return 1;
}
MySubclass : MyClass
- (int)myNumber;
MySubclass
- (int)myNumber {    
    return 2;    
}

解决方法:由于Objective-C不支持方法重载,所以我们需要使用不同的方法名来实现方法重载。在方法重写的情况下,我们需要确保子类中的方法与父类中被重写的方法具有相同的返回类型和参数类型。

0
0 Comments

方法重载和方法重写之间的区别是什么?

方法重载发生在编译时,而方法重写发生在运行时。重载方法的调用与其定义的绑定发生在编译时,而重写方法的调用与其定义的绑定发生在运行时。

静态方法可以重载,这意味着一个类可以有多个同名的静态方法。静态方法不能被重写,即使在子类中声明了相同的静态方法,它与父类的同名方法没有任何关系。

最基本的区别是重载是在同一个类中进行的,而重写需要基类和子类。重写是为了给继承的方法提供特定的实现。

对于重载的方法使用静态绑定,而对于重写/被重写的方法使用动态绑定。

性能方面,重载比重写更高效。原因是重写方法的绑定是在运行时完成的。

私有方法和final方法可以重载,但不能被重写。这意味着一个类可以有多个同名的私有/ final方法,但子类不能重写其基类的私有/ final方法。

在方法重载中,返回类型无关紧要,它可以相同或不同。然而,在方法重写中,重写方法可以具有更具体的返回类型(参考此链接)。

在方法重载中,参数列表应该是不同的。在方法重写中,参数列表应该相同。

重写需要继承,而重载不需要。

谢谢你分享这个详细的解释。

0