实例变量可见度和方法(setter,getter 方法)
2015-11-24 22:43
405 查看
//
一、
// main.m
// OC相对于C来说进行了一个优化, #import 相对于 #include 来说:可以防止重复导入头文件引起的编译错误
//#import"AudiCar.h"
//#import"AudiCar.h" //不报错
//#include"AudiCar.h"
//#include"AudiCar.h" //报错
#import<Foundation/Foundation.h>
#import"Person.h"
#import"AudiCar.h"
#import"MobilePhone.h"
intmain(intargc, const char * argv[]) {
@autoreleasepool {
// Person *person = [[Personalloc]init];
// // 用 ->访问 @public 修饰的实例变量
// person->_name = @"ylc";
// NSLog(@"%@",person->_name);
//// 实例变量没用 @public 修饰, 不能这样访问
//// 一般不用 @public 修饰,因为违背了面向对象的封装特性
// //赋值方法
// [personsetName:@"jh"];
// NSLog(@"%@",[personname]);
// //多参数的赋值方法
// [personsetName:@"fdji"gender:@"m" age:33 weight:290];
// AudiCar *audicar =[[AudiCaralloc]init];
// MobilePhone *mobilephone =[[MobilePhonealloc]init];
// [audicar setBrand:@"Audi"color:@"red" price:100];
// [audicar run];
// NSLog(@"%@ %@ %i",[audicarbrand],[audicar color],[audicar price]);
//
// [mobilephonesetBrand:@"apple"size:5 price:300];
// [mobilephone show];
// NSLog(@"%@ %i%i",[mobilephone brand],[mobilephone size],[mobilephone price]);
// self = [superinitWithBrand:@"kd" price:1111 color:@"red"];
// 若initWithBrand中的 W 改写成小写后,会发生错误。
// 不完全初始化方法
// [audiinitWithBrand:@"fedora"price:1000 color:@"red"];
NSLog(@"%@%@ %i",[audi brand],[audi color],[audi price]);
// 方法的使用(方法的调用)
// [消息的接受者方法名]
// 如果是对象(-)方法,消息接受者为对象
// 如果是类(+)方法,消息接受者为类名
// 有参数,给参数,无参数,不给
// 有返回值定义相同类型的变量接收
// 无返回值不接收
}
return0;
}
// Person.h
#import<Foundation/Foundation.h>
@interface Person : NSObject
{
int _weight;
@public
NSString *_name;
@protected
NSString *_gender;
@private
int _age;
// 实例变量可见度
// 用 @public 修饰无论哪一个类都可以访问
// 用 @protected 修饰只有当前类和子类可以访问
// 用 @private 修饰只有当前类可以访问
// 用 @package 修饰与框架有关,几乎不用
// 如果没有写修饰词,默认为@protected
}
// 方法名和变量名命名规范: 第一个单词首字母小写,第二个单词首字母大写
// 类名每个单词的首字母大写
// void 代表返回值
// NSString * 代表参数类型
// NSString * 后面的name代表参数名
// NSString * 前面的Name代表参数形容词
// 方法名: 去掉方法类型,去掉返回值类型,去掉参数以及参数类型
// 方法名为: setName:
// 赋值方法 setter
- (void)setName:(NSString *)name;
- (void)setGender:(NSString *)gender;
- (void)setAge:(int) age;
- (void)setWeight:(int)weight;
// 取值方法 getter
- (NSString *)name;
- (NSString *)gender;
- (int)age;
- (int)weight;
//- (void)setValue:(id)valueforKey:(NSString *)key;
// 方法名: setValue: forKey:
// 多参数的赋值方法
- (void)setName:(NSString *)namegender:(NSString *)gender age:(int)age weight:(int)weight;
- (instancetype)initWithName:(NSString*)name gender:(NSString *)gender age:(int)age weight:(int)weight;
@end
//Person.m
#import "Person.h"
@implementation Person
// 重写init方法
- (instancetype)init{
_name = @"dfj";
_age = 123;
_gender = @"m";
_weight = 123;
return self;
}
- (void)setName:(NSString *)name{
_name = name;
}
- (void)setGender:(NSString *)gender{
_gender = gender;
}
- (void)setAge:(int)age{
_age = age;
}
- (void)setWeight:(int)weight{
_weight = weight;
}
- (NSString *)name{
return _name;
}
- (NSString *)gender{
return _gender;
}
- (int)age{
return _age;
}
- (int)weight{
return _weight;
}
// 多参数的赋值方法实现
- (void)setName:(NSString *)namegender:(NSString *)gender age:(int)age weight:(int)weight{
_name = name;
_gender = gender;
_age = age;
_weight = weight;
}
// 初始化方法
- (instancetype)initWithName:(NSString*)name gender:(NSString *)gender age:(int)age weight:(int)weight{
_name = name;
_gender = gender;
_age = age;
_weight = weight;
return self;
}
@end
二、
// A.h
#import<Foundation/Foundation.h>
//# import "B.h"
// @class 防止循环导入头文件引起的错误,(A导入B,B导入A就构成循环导入错误)
// 跟在 @class 后面的字符串作为类名使用,不引入B.h的任何东西。
// 一般不在 .h 文件中导入头文件,否则有可能因为循环导入引起的编译错误,所以一般在.m文件中导入有文件.(若在A.h文件中导入B.h,B.h中导入A.h,就会引起循环导入错误)
@class B;
@interface A : NSObject
{
B*_b;
}
@end
// A.m
#import "A.h"
#import "B.h"
@implementation A
@end
//B.h
#import<Foundation/Foundation.h>
// import "A.h"
// 跟在 @class 后面的字符串作为类名使用,不引入A.h的任何东西。
@class A;
@interface B : NSObject
{
A*_a;
}
@end
// B.m
#import "B.h"
#import "A.h"
@implementation B
@end
一、
// main.m
// OC相对于C来说进行了一个优化, #import 相对于 #include 来说:可以防止重复导入头文件引起的编译错误
//#import"AudiCar.h"
//#import"AudiCar.h" //不报错
//#include"AudiCar.h"
//#include"AudiCar.h" //报错
#import<Foundation/Foundation.h>
#import"Person.h"
#import"AudiCar.h"
#import"MobilePhone.h"
intmain(intargc, const char * argv[]) {
@autoreleasepool {
// Person *person = [[Personalloc]init];
// // 用 ->访问 @public 修饰的实例变量
// person->_name = @"ylc";
// NSLog(@"%@",person->_name);
//// 实例变量没用 @public 修饰, 不能这样访问
//// 一般不用 @public 修饰,因为违背了面向对象的封装特性
// //赋值方法
// [personsetName:@"jh"];
// NSLog(@"%@",[personname]);
// //多参数的赋值方法
// [personsetName:@"fdji"gender:@"m" age:33 weight:290];
// AudiCar *audicar =[[AudiCaralloc]init];
// MobilePhone *mobilephone =[[MobilePhonealloc]init];
// [audicar setBrand:@"Audi"color:@"red" price:100];
// [audicar run];
// NSLog(@"%@ %@ %i",[audicarbrand],[audicar color],[audicar price]);
//
// [mobilephonesetBrand:@"apple"size:5 price:300];
// [mobilephone show];
// NSLog(@"%@ %i%i",[mobilephone brand],[mobilephone size],[mobilephone price]);
// self = [superinitWithBrand:@"kd" price:1111 color:@"red"];
// 若initWithBrand中的 W 改写成小写后,会发生错误。
// 不完全初始化方法
// [audiinitWithBrand:@"fedora"price:1000 color:@"red"];
NSLog(@"%@%@ %i",[audi brand],[audi color],[audi price]);
// 方法的使用(方法的调用)
// [消息的接受者方法名]
// 如果是对象(-)方法,消息接受者为对象
// 如果是类(+)方法,消息接受者为类名
// 有参数,给参数,无参数,不给
// 有返回值定义相同类型的变量接收
// 无返回值不接收
}
return0;
}
// Person.h
#import<Foundation/Foundation.h>
@interface Person : NSObject
{
int _weight;
@public
NSString *_name;
@protected
NSString *_gender;
@private
int _age;
// 实例变量可见度
// 用 @public 修饰无论哪一个类都可以访问
// 用 @protected 修饰只有当前类和子类可以访问
// 用 @private 修饰只有当前类可以访问
// 用 @package 修饰与框架有关,几乎不用
// 如果没有写修饰词,默认为@protected
}
// 方法名和变量名命名规范: 第一个单词首字母小写,第二个单词首字母大写
// 类名每个单词的首字母大写
// void 代表返回值
// NSString * 代表参数类型
// NSString * 后面的name代表参数名
// NSString * 前面的Name代表参数形容词
// 方法名: 去掉方法类型,去掉返回值类型,去掉参数以及参数类型
// 方法名为: setName:
// 赋值方法 setter
- (void)setName:(NSString *)name;
- (void)setGender:(NSString *)gender;
- (void)setAge:(int) age;
- (void)setWeight:(int)weight;
// 取值方法 getter
- (NSString *)name;
- (NSString *)gender;
- (int)age;
- (int)weight;
//- (void)setValue:(id)valueforKey:(NSString *)key;
// 方法名: setValue: forKey:
// 多参数的赋值方法
- (void)setName:(NSString *)namegender:(NSString *)gender age:(int)age weight:(int)weight;
- (instancetype)initWithName:(NSString*)name gender:(NSString *)gender age:(int)age weight:(int)weight;
@end
//Person.m
#import "Person.h"
@implementation Person
// 重写init方法
- (instancetype)init{
_name = @"dfj";
_age = 123;
_gender = @"m";
_weight = 123;
return self;
}
- (void)setName:(NSString *)name{
_name = name;
}
- (void)setGender:(NSString *)gender{
_gender = gender;
}
- (void)setAge:(int)age{
_age = age;
}
- (void)setWeight:(int)weight{
_weight = weight;
}
- (NSString *)name{
return _name;
}
- (NSString *)gender{
return _gender;
}
- (int)age{
return _age;
}
- (int)weight{
return _weight;
}
// 多参数的赋值方法实现
- (void)setName:(NSString *)namegender:(NSString *)gender age:(int)age weight:(int)weight{
_name = name;
_gender = gender;
_age = age;
_weight = weight;
}
// 初始化方法
- (instancetype)initWithName:(NSString*)name gender:(NSString *)gender age:(int)age weight:(int)weight{
_name = name;
_gender = gender;
_age = age;
_weight = weight;
return self;
}
@end
二、
// A.h
#import<Foundation/Foundation.h>
//# import "B.h"
// @class 防止循环导入头文件引起的错误,(A导入B,B导入A就构成循环导入错误)
// 跟在 @class 后面的字符串作为类名使用,不引入B.h的任何东西。
// 一般不在 .h 文件中导入头文件,否则有可能因为循环导入引起的编译错误,所以一般在.m文件中导入有文件.(若在A.h文件中导入B.h,B.h中导入A.h,就会引起循环导入错误)
@class B;
@interface A : NSObject
{
B*_b;
}
@end
// A.m
#import "A.h"
#import "B.h"
@implementation A
@end
//B.h
#import<Foundation/Foundation.h>
// import "A.h"
// 跟在 @class 后面的字符串作为类名使用,不引入A.h的任何东西。
@class A;
@interface B : NSObject
{
A*_a;
}
@end
// B.m
#import "B.h"
#import "A.h"
@implementation B
@end
相关文章推荐
- Android Native 绘图方法
- C#中struct和class的区别详解
- VBS ArrayList Class vbs中的数组类
- 大家看了就明白了css样式中类class与标识id选择符的区别小结
- 深入了解PHP类Class的概念
- jquery 表单验证之通过 class验证表单不为空
- setAttribute 与 class冲突解决
- JavaScript中的类(Class)详细介绍
- javascript面向对象包装类Class封装类库剖析
- jQuery使用hide方法隐藏指定元素class样式用法实例
- jQuery给多个不同元素添加class样式的方法
- JavaScript更改class和id的方法
- 一篇入门的php Class 文章
- 深入C++中struct与class的区别分析
- js中设置元素class的三种方法小结
- c++中typename和class的区别介绍
- php class类的用法详细总结
- Windows平台的 PHP 报错 Fatal error: Class COM not found in 的解决方法
- JavaScript跨浏览器获取页面中相同class节点的方法
- js实现class样式的修改、添加及删除的方法