OC 中的重写 OC中没有重载 以及隐藏

一、定义:

重载、重写和隐藏是很容易混淆的类似概念。虽然所有这三种技术都使您得以创建同名的成员,但它们之间有一些重要的差异。

  • 重载的成员用于提供属性或方法的不同版本,这些版本具有相同名称但是接受不同数量的参数或者接受不同数据类型的参数。
  • 重写的属性和方法用于替换在派生类中不适合的继承的属性或方法。重写的成员必须接受同一数据类型和参数数量。派生类继承重写的成员。
  • 隐藏的成员用于局部替换具有更广范围的成员。任何类型都可隐藏任何其他类型。例如,可声明隐藏同名继承方法的属性。无法继承隐藏的成员。

Objective-c中类的继承与C++类似,不同的是Objective-c不支持多重继承,一个类只能有一个父类,单继承使Objective-c的继承关系很简单,易于管理程序。
Objective-c中所有类的父类是NSObject。

二、方法重写

在Objective-c中,子类可继承父类中的方法,而不需要重新编写相同的方法,直接可以使用父类的方法。
但有时我们不想使用使用父类方法,而是想作一定的修改,怎么办呢?只要将子类中书写一个与父类具有相同的方法名、返回类型和参数,就可以将将父类的方法覆盖重写。比较简单。

三、方法重载

在Objective-c中,方法是不能重载的。也就是说我们不能在类中定义这样的两个方法:它们的名子相同,参数个数相同,参数类型不同,不同的返回值类型。否则Xcode会报错。

四、总结

1.什么是重载?oc中不存在重载。

在同一作用域内,可以有一组具有相同函数名,不同参数列表的函数,这组函数被称为重载函数

C++函数名相同是函数的名称相同。参数列表不同指参数的个数或者类型不同。

oc中函数名相同包含函数名称和所有的标签相同。oc不允许同一作用域内的同名函数,因此不允许重载。

即不允许函数名相同,参数个数相同,但类型不同的两个函数存在。

在oc中同一作用域内不允许相同函数名,因此oc中没有严格意义的重载。如:

-(void) test:(int) intValue;

-(void) test:(float) floatValue;

在c++中构成重载,因为函数名test重复,但参数类型不同。在oc中错误,因为函数名都是test,不构成重载

-(void) test:(int) x andY:(int) y;

-(void) test:(int) x andY:(double)y;//错误,还是重名了,函数名都是(test:andY:)

-(void) test:(int) x :(double) y; //正确,名字不同  (test::)

通过一个方法包含另一个方法,达到类似重载的功能,它们具有不同的函数名。通常用于构造函数,如:

init()

intwithx(){包含对init的调用}

intwithxy().....{包含对initx的调用}

越具体的函数可以在前面已有方法基础上建立

2.什么是重写?

重写发生在子类和父类之间,通过在子类中定义和父类相同方法名的方法,修改从父类继承过来的方法定义。

重写的作用是修改从父类继承过来的方法定义。(继承只能增加,修改,不能减少或者删除父类方法)

重写的要求:包括所有的标签相同即包括了参数个数需要相同,并且返回值要相同。

重写之后的方法查找过程:使用子类指针调用方法时,优先选择子类方法,没有的情况下才寻找父类的方法。

若要直接使用父类方法,使用super.体现了父子之间的多态性,如何寻找父子同名方法

时间: 2024-12-06 23:46:48

OC 中的重写 OC中没有重载 以及隐藏的相关文章

继承、继承中的重写

[修饰符] class 子类名 extends 父类名 { 类体 } 例: public class Bird{//父类 String color="white"; String skin="羽毛"; } public class Pigeon extends Bird{//子类 public static void main(String[] args) { Pigeon pigeon=new Pigeon();//建立类的对象 System.out.printl

java中的重写和重载

重写 在java中有很多的继承,继承下来的有变量.方法.在有一些子类要实现的方法中,方法名.传的参数.返回值跟父类中的方法一样,但具体实现又跟父类的不一样,这时候我们就需要重写父类的方法,就比如我们有一个类叫做Animals,Animals类中有一个叫做Call,然后我们继承Animals又生成了Cat类和Dog类,Cat和Dog也分别有自己特别的叫声,程序如下: 1 class Animals { 2 public void call() { 3 System.out.println("啊啊啊

Java中的方法及方法的重载与重写

方法 定义:定义在类中的具有特定功能的独立的小程序: 方法的好处: 1.提高了代价的复用性: 2.可以简化书写: 格式: 访问修饰符 修饰符 返回值类型 方法名(参数类型 参数名称,……){ 功能代码: return 返回值: } 定义方法的时候有两个需要明确: 1.方法的返回值类型,如果方法不需要有返回值,那么返回值的类型为void: 2.需要明确参数: 注意: 1.方法以运行return语句作为结束.如果方法没有返回值,return语句可以省略不写: 2.方法中不可以再定义方法: 方法的重载

Swift中混编OC第三方库

现在Swift的第三方库还比较少,有时候需要使用OC的第三方库,其实也是很容易的.   我们使用如下步骤: 1.新建的Swift项目,第一次创建OC文件时会询问是否生成 桥接头,选择是的话会生成一个桥接头文件,文件如图:   (项目名-Bridge-Header.h)   2.在其中的#import想要在项目中使用的OC头文件即可使用   3.使用Swift语法在项目中这样使用: 即可

UIWebView中JS与OC交互 WebViewJavascriptBridge的使用

一.综述 现在很多的应用都会在多种平台上发布,所以很多程序猿们都开始使用Hybrid App的设计模式.就是在app上嵌入网页,只要写一份网页代码,就可以跑在不同的系统上.在iOS中,app多是通过WebView来加载网页,由于功能需求等原因,代码中少不得要和跟网页交互. 二.原理 在iOS中,本地调用Javascript语言,是通过UIWebView中的实例方法stringByEvaluatingJavaScriptFromString:来实现的,该方法通过字符串对象的形式传入JS代码. [w

oc-03-OC访问OC源文件、C源文件中的函数

show.h #ifndef __OCDay01__Show__ #define __OCDay01__Show__ #include <stdio.h> extern void testTshow(); #endif /* defined(__OCDay01__Show__) */ show.c #include "Show.h" void testTshow(){ printf("我就是大名鼎鼎的 C文件中的 函数 ,何人敢调用? 哈哈哈哈 \n")

iOS在Xcode6中怎么创建OC category文件

升级Xcode6之后我们发现,本来创建category文件的选项突然不见了,那在在Xcode6中怎么创建OC category文件,其实它还是在,只是Xcode6把他放在了第二步选择了: 点击下一步,我们就可以选择创建category文件了 然后选择如下:比如:给Person类写一个名字为QYMa的分类 ok!这样分类就建好啦! (我都写完了,为什么不让我发-_-#,200字很重要嘛?解决问题才是关键啊!我不想写废话的!是你逼我的!-_-#.今天外面继续是打雷 闪电大暴雨!忽然想起一篇文章名字叫

ios-UIWebView中js和oc代码的互调

webview是ios中显示远程数据的网页控件,webview能显示的内容很多,MP4.文本.pdf等等: 关于js和oc代码的互相调用 1:oc中调用js代码; >>oc中调用js代码很简单,一个方法:stringByEvaluatingJavaScriptFromString:@“”: >>要执行的js代码方法到字符串中就可以了: 2:js中执行oc的某段代码: >>js中执行oc的代码要通过一个桥梁: 者桥梁就是webview的一个代理方法:(BOOL)webVi

什么情况下才要重写Objective-C中的description方法

特别注意: 千万不要在description方法中同时使用%@和self,同时使用了%@和self,代表要调用self的description方法,因此最终会导致程序陷入死循环,循环调用description方法 1.NSLog回顾   大家都知道,我们可以用NSLog函数来输出字符串和一些基本数据类 1 int age = 11; 2 NSLog( @" age is %d", age); * 第2行的%d代表会输出一个整型数据,右边的变量age会代替%d的位置进行输出 * 输出结果