OC视频笔记2.6(略)2.7-2.8-2.9(多态)2.10(权限修饰符的使用)2.11(@calss和import)

OC2.6

是一个重写的小练习,略



2.7-2.8多态

同一种类型具有多种表现形态

根据:(父类变量可以指向子类对象:    例: 动物 * dog = [ [狗 alloc] init];)

可以定义方法传进的参数是父类对象,既然定义的是父类对象,所以就可以在传参数的时候传进子类对象,那么传进不同的子类对象的话,该方法得到的结果也就不一样了,so,说同一种类型具有多种表现形态。


多态的产生条件:

1.要有继承

2.要有方法覆盖

3.父类声明的变量指向子类对象



2.10权限修饰符的使用

修饰符          内部类          子类          任何地方

private             yes

protected        yes             yes

public              yes             yes            yes

OC中默认的是protected,不要声明为public,那样会破坏类的封装性

在类的声明里面,声明参数的地方用权限修饰符 ,如下

{

@*****

属性1

属性2

@******

属性3

属性4

}

@protected   受保护的属性,子类可以访问此修饰符修饰的属性(默认的情况下就是protected权限)

@private  私有的,只在该类内部使用,子类和其他类都不可以访问

@public   公有的,所有类都可以访问

@packaeg   使用@package修饰的属性,只能在当前框架中才能使用(java中的包内访问)

注意1:OC里面的方法没有被修饰的情况,OC里面的方法都是公开的。但是有的时候,我们需要一个私有的方法,只能被本类自己访问,这种种情况我们就需要只在.m文件里面去实现这个方法,而不在.h文件里面声明,即可。(但是如果通过该类的对象,在main里面也可也调用该方法,只是编译器会发出警告,提示该类中没有这个方法,但是运行的时候还是可以运行的)。     所以说OC中的私有方法只是一个约定而已,在语法上没有真正的私有方法。

注意2:由于OC支持C语言,既然OC里面没有私有的方法,那么就可以在.m文件里面定义一个C语言的函数来解决这一个问题

static void privateFuncation{                  //函数

  //函数内部

}                                                                   //但这不是OC,这是C语言里面的函数



2.11@class和import

import:导入一个头文件,获取该头文件中的定义——属性和方法(类1里面import类2,就是将类2.h里面的信息拷贝到类1.h里面了)

注意:两个类相互导入的话就会出现问题,而且很难找到。出现这种需要两个类相互导入的情况的话,就需要使用到@class了

@calss:告诉编译器有这么一个类,具体这个类怎么定义的一无所知。(@class解决相互引用的手段:类1.h文件里面将import类2改成@class类2,就是告诉编译器有类2这么一个类。但是@class类2没有将类2的定义拷贝到类1.h文件里面,所以当前文件不知道类2里面都有什么属性、方法。但是没关系,同样有解决的办法,我们需要只需要把@class类2当做引用取用,在类1.m文件里面#import类2,这样的话,不光可以避免相互引用,还相当于把类2的引用拷贝到类1.m文件里面供类1来使用(不在类1.m文件里引用类2.h文件也可以,建议引用))

注意:在继承里面子类的.h文件不能用“@class父类”的形式引用父类,因为子类继承父类的时候有这样一句语法“@interface子类:父类”就会报错,就像前面说的@class只是告诉编译器有这个类,但对这个类是怎么定义的一无所知,所以还想要继承父类,还对父类的定义一无所知,那当然是不靠谱了。


所以建议:在允许的条件下.h文件尽量使用@class文件,.m文件里面再使用#import语法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值