在object-c语言中,类的变量属性实际上是有作用域范围的,那么我们oc语言有哪些变量作用域呢,总共有3个作用域,如下。
| OC变量作用域名称 | 作用范围 |
| @public | 全局都可以访问 |
| @protected | 只能在类内部或者子类中访问 |
| @private | 只能在类的内部访问 |
在默认情况下类的属性的作用域是@protected,我们前面的Student类就有两个属性:int age和int no,也就是说在别的类中想给这些属性变量赋值的话,需要继承这个Student学生类。例如我又创建了一个GoodStudent的类,我需要写一个方法,给age年龄赋值,代码如下。
1.GoodStudent.h申明类代码。
#import "Student.h" //继承Student类 @interface GoodStudent : Student //没有在这儿申明的方法就是private方法 //-(void)test; @end
2.GoodStudent.m实现类的代码。
#import "GoodStudent.h"
@implementation GoodStudent
//外部类方法使用了Student类中的属性age
-(void)test{
//这里的self指的是
self.age = 20;
NSLog(@"年龄是:%d",age);
}
//静态方法使用self
+(void)test2{
[GoodStudent alloc];
[self alloc];
//以上的代码是等效的,写一个就好
}
@end说明:以上是一个外部类GoodStudent调用内部类Student.h中申明的属性所需要继承的,还有一点就是,凡是没有在.h中申明的方法,就叫private方法,例如上面的test方法,我并没有在GoodStudent.h中申明它,而是直接在GoodStudent.m中写了test这个方法,所以这种方法只能在本类中使用。
self关键字代表的自己本身,在类方法中("-"冒号表示)使用代表的是本类对象,在静态方法中("+"冒号表示)使用代表的是当前类的类名。静态方法只能调用静态方法或者静态属性。