// Person.h
// 这里声明的方法都是public的
@interface Person : NSObject
{
// 默认为protected
int n1;
@protected
int n2;
@private
int n3;
@public
int n4;
}
// @propery:声明setter/getter方法
@property (nonatomic, assign) int n3;
// 在Xcode4.5及以后的版本中,没有@synthesize,会自动生成一个_xxx,本例中的_autoGen,是private
@property (nonatomic ,assign) int autoGen;
- (id) init: (int)_n1 np2:(int)_n2 np3:(int)_n3 np4:(int)_n4;
- (void) print;
@end
// 这里声明的方法都是public, 并且只能类中定义
@interface Person ()
{
// 扩展(匿名类别)可以定义变量, 可以用@public,@private,@proteced, 默认为private
int height;
}
// 如autoGen一致,先注释掉
// @property (nonatomic ,assign) int autoGen2;
- (void) Extend;
@end
@interface Student : Person
{
NSString *name;
}
-(id) init: (int)_n1 np2:(int)_n2 np3:(int)_n3 np4:(int)_n4 sp1:(NSString*)_name;
-(void) print;
@end
// 这里声明的方法都是public的
@interface Student(Class)
{
// 不能定义变量
// int nshcool;
}
-(void) Call;
@end
实现:
#import "Person.h"
@implementation Person
// @synthesize:实现setter/getter方法, 指定实例变量
@synthesize n3;
- (void) print {
NSLog(@"%d, %d, %d, %d, %d", self->n1, n2, n3, n4, self->_autoGen);
}
- (id) init: (int)_n1 np2:(int)_n2 np3:(int)_n3 np4:(int)_n4 {
self->n1 = _n1;
self->n2 = _n2;
self->n3 = _n3;
self->n4 = _n4;
return self;
}
-(void) Extend {
NSLog(@"This Is Extend");
}
@end
@implementation Student
-(id) init: (int)_n1 np2:(int)_n2 np3:(int)_n3 np4:(int)_n4 sp1:(NSString*)_name {
self = [super init:_n1 np2:_n2 np3:_n3 np4:_n4];
self->name = _name;
return self;
}
-(void) print{
// n3为private,所以用点语法(相当于调用getter)
NSLog(@"%d, %d, %d, %d, %@", self->n1, self->n2, self.n3, self->n4, self->name);
}
@end
@implementation Student (Class)
-(void) Call {
NSLog(@"My Name Is %@", self->name);
}
@end
调用:
int main(int argc, const char * argv[]) {
@autoreleasepool {
Person *p = [[Person alloc] init:1 np2:2 np3:3 np4:4];
p.autoGen = 100;
[p print];
[p Extend];
Student * s = [[Student alloc] init:1 np2:2 np3:3 np4:4 sp1:@"flowshell"];
[s print];
[s Call];
}
return 0;
}
结果: