您的位置:首页 > 运维架构

我的OC练习(五)-@property的使用和子类继承的练习

2015-11-09 15:40 375 查看
先贴我的练习代码:

main.m

//
//  main.m
//  4th
//
//  Created by Morning on 2015/11/09.
//  Copyright © 2015年 Morning. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Dog.h"
#import "Jiwawa.h"

int main(int argc, const char * argv[]) {
@autoreleasepool {
// insert code here...

Dog * dog = [[Dog alloc] init];
//通过.来调用存取方法
dog.age=10;
dog.weight=12.3;
[dog bark];
//通过消息调用存取方法
[dog setAge:11];
[dog setWeight:32.1];
[dog bark];

Dog* jww = [Jiwawa new];
//子类通过.来调用存取方法
jww.age=2;
jww.weight=12;
[jww bark];
//子类通过消息调用存取方法
[jww setAge:4];
[jww setWeight:21];
[jww bark];

}
return 0;
}


Dog.h:

//
//  Dog.h
//  1st
//
//  Created by Morning on 2015/11/09.
//  Copyright © 2015年 Morning. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface Dog : NSObject
@property int age;//申明实例变量
@property float weight;
-(void)bark;//声明实例方法

@end


Dog.m:

//
//  Dog.m
//  1st
//
//  Created by Morning on 2015/11/09.
//  Copyright © 2015年 Morning. All rights reserved.
//

#import "Dog.h"

@implementation Dog
@synthesize age,weight;
-(void)bark{
NSLog(@"我是狗,我%d岁,我重%.2fkg",age,weight);
}

@end


Jiwawa.h:

//
//  Jiwawa.h
//  1st
//
//  Created by Morning on 2015/11/09.
//  Copyright © 2015年 Morning. All rights reserved.
//

#import "Dog.h"

@interface Jiwawa : Dog
-(void)bark;
@end


Jiwawa.m:

//
//  Jiwawa.m
//  1st
//
//  Created by Morning on 2015/11/09.
//  Copyright © 2015年 Morning. All rights reserved.
//

#import "Jiwawa.h"

@implementation Jiwawa

@synthesize age,weight;//这句话可以使子类的对象方法直接调用继承来的变量,如果不写这句话,则需要通过self或super关键字来调用,其实效果一样。
-(void)bark{
NSLog(@"我是吉娃娃,我%d岁,我重%.2fkg。",age, weight);//子类对象调用
}

@end


运行结果:



子类中实现的时候需要加上@synthesize来引入父类中用@property申明的变量。十分奇怪的是,不作引入的话就无法识别变量名。但有趣的是用super关键字可以引入是可以理解的,但self也可以在不加@synthesize的情况下调用道父类中@property申明的变量,那为什么直接识别变量呢?真是很奇怪。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: