OC定义类的和方法

本文详细探讨Objective-C中如何定义类及其方法,深入解析类的结构和方法的实现过程,帮助读者掌握OC编程的核心概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

// 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;
}


结果:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值