OC第二讲(InstanceVariableAndMethod实例变量和方法)
2015-10-06 09:35
459 查看
main.m文件里:
一:1.
面向对象的三大特性: 封装, 继承, 多态
封装: 高内聚, 低耦合
内聚: 模块内部成员的关联程度
耦合: 模块之间的关联程度
例:Girl *girl = [[Girl alloc] init];
2.//实例变量的可见度
1).public , 公用的, 公开的, 可以在类的内部和外部进行访问
内部访问:实例变量名
外部访问:对象->实例变量名
注:public用的比较少,因为和封装的思想相违背
例:girl->name = @"貂蝉";//赋值
NSLog(@"%@", girl->name);//访问
2).protected(默认值),受保护的,不允许在外部访问,可以在类和子类的内部进行访问
内部访问: 实例变量名
外部访问: 通过方法(设置器 和 访问器)访问
[girl setAge:888];//赋值
NSLog(@"%ld",[girl age]);//访问
//通过点语法调用设置器和访问器
girl.age = 888;
NSLog(@"%ld",girl.age);
//注:a.点语法出现在=(赋值运算符)的左侧,调用的是设置器,其他位置都是访问器
//b.点语法的前提: 写了设置器和访问器
[girl setGender:@"女"];
NSLog(@"%@",[girl gender]);
3).private,私有的,外部不允许访问, 内部可以访问,子类不能访问
内部访问: 实例变量名
外部访问: 设置器和访问器
[girl setHeight:12.415];
NSLog(@"%lf",[girl height]);
girl.height = 12.4556;
NSLog(@"%lf",girl.height);
二:方法(函数)
1.方法的分类
+: 类方法, 由类名调用
-: 实例方法, 由对象调用
//注: 类方法内部不能够访问实例变
2.无参数
//格式:
+/-(void)方法名;
[girl sayHello];
[Girl sayHi];
3.一个参数
//格式:
+/-(返回值数据类型)方法名:(参数数据类型)参数名
[girl sayHello:@"灰机"];
[Girl sayHi:@"小灰灰"];
4.多个参数
格式:
+/- (返回值数据类型)方法名1:(数据类型1)参数1 方法名2:(数据类型2)参数2 方法名3:(数据类型3)参数名3...
[girl sayHello:@"王尼玛"withCount:5];
[GirlsayHi:@"王你妹"withCount:6];
三:初始化方法
1.为实例变量赋初值
Girl *girl1 = [[Girl alloc] init];
NSLog(@"name:%@, age:%ld, gender:%@, height:%.2f",girl1->name, girl1.age, girl1.gender, girl1.height);
例:定义一个苹果类
//实例变量: 颜色, 重量, 价格, 都是protected
//并且颜色默认为红色, 价格默认为10, 重量默认为0.5
Apple *apple = [[Apple alloc] init];
NSLog(@"color:%@, price:%.2lf, weight: %.2lf",apple.color,apple.price,apple.weight);//需要访问器
[apple eat];
apple.color = @"白色";//需要设置器
NSLog(@"%@",apple.color);
//自定义初始化方法
//Apple *apple1 = [[Apple alloc]initWithColor:@"黑色" price:1 weight:100];
四:便利构造器
//作用: 把开辟内存, 初始化, 对实例变量赋值结合在一起
// Apple *apple2 = [Apple appleWithColor:@"绿色" price:1 weight:100];
Girl.h文件里面:
一:@interface Girl : NSObject{
@public
//实例变量
NSString *name;//姓名
@protected
NSInteger age;//年龄
NSString *gender;//性别
@private
CGFloat height;//身高
}
//判断方法是否相同
//1.+/-
//2.方法名
- (void)sayHello;
+ (void)sayHi;
//冒号是方法名的一部分
//方法名sayHello:
- (void)sayHello:(NSString *)aName;
+ (void)sayHi:(NSString *)aName;
//方法名sayHello:withCount:
//注:多个参数的方法是分段的, 每段之间加空格, 每段方法名都是小驼峰法
- (void)sayHello:(NSString *)aName withCount:(NSInteger)aCount;
+ (void)sayHi:(NSString *)aName withCount:(NSInteger)aCount;
//sayHello:
//- (void)sayHello:(NSString *)aName :(NSInteger)aCount;
//::
//- (void):(NSString *)aName :(NSInteger)aCount;
//赋值方法(setter, 设置器)
//-(void)set + 实例变量名:(实例变量的数据类型)a + 实例变量名
- (void)setAge:(NSInteger )aAge;
//访问方法(getter, 访问器)
//-(实例变量的数据类型)实例变量名
- (NSInteger)age;
- (void)setGender:(NSString *)aGender;
- (NSString *)gender;
- (void) setHeight:(CGFloat )aHeight;
- (CGFloat)height;
三:
GIirl.m文件里:
@implementation Girl
//初始化方法
//1.实例方法 , 因为内部要求对实例变量进行赋值
//2.返回值类型id: void *,代指 所有对象类型
//3.不需要写声明, 因为系统已经声明过了
//4.最后一定要加上return self, 固定写法
//重写系统init
-(id)init {
gender = @"男";
name = @"阿三";
age = 18 ;
height = 5448;
returnself;
}
-(void)sayHello{
NSLog(@"你好,我叫%@",name);
}
+ (void)sayHi{
NSLog(@"Hi!我 是 ");
}
- (void)sayHello:(NSString *)aName{
NSLog(@"Hi! %@",aName);
}
+ (void)sayHi:(NSString *)aName{
NSLog(@"Hi! %@",aName);
}
- (void)sayHello:(NSString *)aName withCount:(NSInteger)aCount{
for (NSInteger i = 0; i < aCount; i++) {
NSLog(@"Hi %@,我叫%@",aName,name);
}
}
+ (void)sayHi:(NSString *)aName withCount:(NSInteger)aCount{
for (NSInteger i = 0; i
NSLog(@"Hi %@",aName);
}
}
-(void)setAge:(NSInteger )aAge{
age = aAge;//设置给当前对象的属性
}
- (NSInteger)age{
returnage;//访问当前对象的属性
}
- (void)setGender:(NSString *)aGender{
gender = aGender;
}
- (NSString *)gender{
return gender;
}
- (void) setHeight:(CGFloat )aHeight{
height = aHeight;
}
- (CGFloat)height{
return height;
}
四:
Apple.h文件里:
@interface Apple : NSObject{
@protected
NSString *color;
CGFloat weight;
CGFloat price;
}
//自定义初始化方法
- (id)initWithColor:(NSString *)aColor price:(CGFloat)aPrice weight:(CGFloat)aWeight;
//便利构造器
+ (id)appleWithColor:(NSString *)aColor price:(CGFloat)aPrice weight:(CGFloat)aWeight;
-(void)setColor:(NSString *)aColor;//(设置器)
-(NSString *)color;//(访问器)
-(void)setWeight:(CGFloat)aWeight;
-(CGFloat)weight;
-(void)setPrice:(CGFloat)aPrice;
-(CGFloat)price;
-(void)eat;
五:
Apple.m文件里:
@implementation Apple
- (id)init{
color = @"红色";
price = 10;
weight = 0.5;
return self;
}
- (void)setColor:(NSString *)aColor{
color = aColor;
}
- (NSString *)color{
return color;
}
- (void)setWeight:(CGFloat)aWeight{
weight = aWeight;
}
- (CGFloat)weight{
return weight;
}
- (void)setPrice:(CGFloat)aPrice{
price = aPrice;
}
- (CGFloat)price{
return price;
}
- (void)eat{
NSLog(@"哈哈,苹果苹果,好吃不贵,经济实惠,不好吃不要钱了");
}
六:man.h文件里:
注:有一道常见的面试题:!!!!!!
//#import "Woman.h"
//面试题
//#include,#import,@class的区别
//1.#include与#import的区别(去重)
//2.#import与@class的区别(是否真实引入头文件)
//#import真实的引入了头文件, @class没有真实的引入头文件,只是告诉编译器,这是一个类; 一般来说@class配合#improt进行使用
//为了防止循环引入头文件,我们在*.h中使用@class, 在*.m中使用#import
//告诉编译器Woman是一个类
@classWoman, Boy;
//@class Boy;
@interface Man : NSObject{
NSString *name;
NSInteger age;
NSString *gender;
Woman *wife;
Boy *son;
}
-(void)setWife:(Woman *)aWife;
-(void)setSon:(Boy *)aBoy;
七:man.m文件里:
#import "Man.h"
#import "Woman.h"
#import "Boy.h"
@implementation Man
-(void)setWife:(Woman *)aWife{
wife = aWife;
}
-(void)setSon:(Boy *)aSon{
son = aSon;
}
@end
八:Woman.h文件里:
#import
@classMan,Boy;
@interface Woman : NSObject{
NSString *name;
NSInteger age;
NSString *gender;
Man *husband;
Boy *son;
}
- (void)setHusband:(Man *)aHusband;
- (void)setSon:(Boy *)aSon;
@end
九:Woman.m文件里:
#import "Woman.h"
#import "Man.h"
#import "Boy.h"
@implementation Woman
- (void)setHusband:(Man *)aHusband{
husband = aHusband;
}
- (void)setSon:(Boy *)aSon{
son = aSon;
}
@end
十:Boy.h文件里:
#import
@class Man, Woman;
@interface Boy : NSObject{
NSString *name;
NSInteger age;
NSString *gender;
Man *father;
Woman *mother;
}
- (void)setFather:(Man *)aFather;
- (void)setMother:(Woman *)aMother;
@end
十一:Boy.m文件里:
#import "Boy.h"
#import "Woman.h"
#import "Man.h"
@implementation Boy
- (void)setFather:(Man *)aFather{
father = aFather;
}
- (void)setMother:(Woman *)aMother{
mother = aMother;
}
@end
十二:Family.h文件里:
@class Man, Woman, Boy;
@interface Family : NSObject{
Man *father;
Woman *mother;
Boy *son;
}
-(void)setFather:(Man *)aFather;
-(void)setMother:(Woman *)aMother;
-(void)setSon:(Boy *)aSon;
@end
十三:Family.m文件里:
#import "Family.h"
#import "Woman.h"
#import "Man.h"
#import "Boy.h"
@implementation Family
-(void)setFather:(Man *)aFather{
father = aFather;
}
-(void)setMother:(Woman *)aMother{
mother =aMother;
}
-(void)setSon:(Boy *)aSon{
son = aSon;
}
@end
OC第二讲结束...看不懂的,想要完整可见的,,私聊发给你
一:1.
面向对象的三大特性: 封装, 继承, 多态
封装: 高内聚, 低耦合
内聚: 模块内部成员的关联程度
耦合: 模块之间的关联程度
例:Girl *girl = [[Girl alloc] init];
2.//实例变量的可见度
1).public , 公用的, 公开的, 可以在类的内部和外部进行访问
内部访问:实例变量名
外部访问:对象->实例变量名
注:public用的比较少,因为和封装的思想相违背
例:girl->name = @"貂蝉";//赋值
NSLog(@"%@", girl->name);//访问
2).protected(默认值),受保护的,不允许在外部访问,可以在类和子类的内部进行访问
内部访问: 实例变量名
外部访问: 通过方法(设置器 和 访问器)访问
[girl setAge:888];//赋值
NSLog(@"%ld",[girl age]);//访问
//通过点语法调用设置器和访问器
girl.age = 888;
NSLog(@"%ld",girl.age);
//注:a.点语法出现在=(赋值运算符)的左侧,调用的是设置器,其他位置都是访问器
//b.点语法的前提: 写了设置器和访问器
[girl setGender:@"女"];
NSLog(@"%@",[girl gender]);
3).private,私有的,外部不允许访问, 内部可以访问,子类不能访问
内部访问: 实例变量名
外部访问: 设置器和访问器
[girl setHeight:12.415];
NSLog(@"%lf",[girl height]);
girl.height = 12.4556;
NSLog(@"%lf",girl.height);
二:方法(函数)
1.方法的分类
+: 类方法, 由类名调用
-: 实例方法, 由对象调用
//注: 类方法内部不能够访问实例变
2.无参数
//格式:
+/-(void)方法名;
[girl sayHello];
[Girl sayHi];
3.一个参数
//格式:
+/-(返回值数据类型)方法名:(参数数据类型)参数名
[girl sayHello:@"灰机"];
[Girl sayHi:@"小灰灰"];
4.多个参数
格式:
+/- (返回值数据类型)方法名1:(数据类型1)参数1 方法名2:(数据类型2)参数2 方法名3:(数据类型3)参数名3...
[girl sayHello:@"王尼玛"withCount:5];
[GirlsayHi:@"王你妹"withCount:6];
三:初始化方法
1.为实例变量赋初值
Girl *girl1 = [[Girl alloc] init];
NSLog(@"name:%@, age:%ld, gender:%@, height:%.2f",girl1->name, girl1.age, girl1.gender, girl1.height);
例:定义一个苹果类
//实例变量: 颜色, 重量, 价格, 都是protected
//并且颜色默认为红色, 价格默认为10, 重量默认为0.5
Apple *apple = [[Apple alloc] init];
NSLog(@"color:%@, price:%.2lf, weight: %.2lf",apple.color,apple.price,apple.weight);//需要访问器
[apple eat];
apple.color = @"白色";//需要设置器
NSLog(@"%@",apple.color);
//自定义初始化方法
//Apple *apple1 = [[Apple alloc]initWithColor:@"黑色" price:1 weight:100];
四:便利构造器
//作用: 把开辟内存, 初始化, 对实例变量赋值结合在一起
// Apple *apple2 = [Apple appleWithColor:@"绿色" price:1 weight:100];
Girl.h文件里面:
一:@interface Girl : NSObject{
@public
//实例变量
NSString *name;//姓名
@protected
NSInteger age;//年龄
NSString *gender;//性别
@private
CGFloat height;//身高
}
//判断方法是否相同
//1.+/-
//2.方法名
- (void)sayHello;
+ (void)sayHi;
//冒号是方法名的一部分
//方法名sayHello:
- (void)sayHello:(NSString *)aName;
+ (void)sayHi:(NSString *)aName;
//方法名sayHello:withCount:
//注:多个参数的方法是分段的, 每段之间加空格, 每段方法名都是小驼峰法
- (void)sayHello:(NSString *)aName withCount:(NSInteger)aCount;
+ (void)sayHi:(NSString *)aName withCount:(NSInteger)aCount;
//sayHello:
//- (void)sayHello:(NSString *)aName :(NSInteger)aCount;
//::
//- (void):(NSString *)aName :(NSInteger)aCount;
//赋值方法(setter, 设置器)
//-(void)set + 实例变量名:(实例变量的数据类型)a + 实例变量名
- (void)setAge:(NSInteger )aAge;
//访问方法(getter, 访问器)
//-(实例变量的数据类型)实例变量名
- (NSInteger)age;
- (void)setGender:(NSString *)aGender;
- (NSString *)gender;
- (void) setHeight:(CGFloat )aHeight;
- (CGFloat)height;
三:
GIirl.m文件里:
@implementation Girl
//初始化方法
//1.实例方法 , 因为内部要求对实例变量进行赋值
//2.返回值类型id: void *,代指 所有对象类型
//3.不需要写声明, 因为系统已经声明过了
//4.最后一定要加上return self, 固定写法
//重写系统init
-(id)init {
gender = @"男";
name = @"阿三";
age = 18 ;
height = 5448;
returnself;
}
-(void)sayHello{
NSLog(@"你好,我叫%@",name);
}
+ (void)sayHi{
NSLog(@"Hi!我 是 ");
}
- (void)sayHello:(NSString *)aName{
NSLog(@"Hi! %@",aName);
}
+ (void)sayHi:(NSString *)aName{
NSLog(@"Hi! %@",aName);
}
- (void)sayHello:(NSString *)aName withCount:(NSInteger)aCount{
for (NSInteger i = 0; i < aCount; i++) {
NSLog(@"Hi %@,我叫%@",aName,name);
}
}
+ (void)sayHi:(NSString *)aName withCount:(NSInteger)aCount{
for (NSInteger i = 0; i
NSLog(@"Hi %@",aName);
}
}
-(void)setAge:(NSInteger )aAge{
age = aAge;//设置给当前对象的属性
}
- (NSInteger)age{
returnage;//访问当前对象的属性
}
- (void)setGender:(NSString *)aGender{
gender = aGender;
}
- (NSString *)gender{
return gender;
}
- (void) setHeight:(CGFloat )aHeight{
height = aHeight;
}
- (CGFloat)height{
return height;
}
四:
Apple.h文件里:
@interface Apple : NSObject{
@protected
NSString *color;
CGFloat weight;
CGFloat price;
}
//自定义初始化方法
- (id)initWithColor:(NSString *)aColor price:(CGFloat)aPrice weight:(CGFloat)aWeight;
//便利构造器
+ (id)appleWithColor:(NSString *)aColor price:(CGFloat)aPrice weight:(CGFloat)aWeight;
-(void)setColor:(NSString *)aColor;//(设置器)
-(NSString *)color;//(访问器)
-(void)setWeight:(CGFloat)aWeight;
-(CGFloat)weight;
-(void)setPrice:(CGFloat)aPrice;
-(CGFloat)price;
-(void)eat;
五:
Apple.m文件里:
@implementation Apple
- (id)init{
color = @"红色";
price = 10;
weight = 0.5;
return self;
}
- (void)setColor:(NSString *)aColor{
color = aColor;
}
- (NSString *)color{
return color;
}
- (void)setWeight:(CGFloat)aWeight{
weight = aWeight;
}
- (CGFloat)weight{
return weight;
}
- (void)setPrice:(CGFloat)aPrice{
price = aPrice;
}
- (CGFloat)price{
return price;
}
- (void)eat{
NSLog(@"哈哈,苹果苹果,好吃不贵,经济实惠,不好吃不要钱了");
}
六:man.h文件里:
注:有一道常见的面试题:!!!!!!
//#import "Woman.h"
//面试题
//#include,#import,@class的区别
//1.#include与#import的区别(去重)
//2.#import与@class的区别(是否真实引入头文件)
//#import真实的引入了头文件, @class没有真实的引入头文件,只是告诉编译器,这是一个类; 一般来说@class配合#improt进行使用
//为了防止循环引入头文件,我们在*.h中使用@class, 在*.m中使用#import
//告诉编译器Woman是一个类
@classWoman, Boy;
//@class Boy;
@interface Man : NSObject{
NSString *name;
NSInteger age;
NSString *gender;
Woman *wife;
Boy *son;
}
-(void)setWife:(Woman *)aWife;
-(void)setSon:(Boy *)aBoy;
七:man.m文件里:
#import "Man.h"
#import "Woman.h"
#import "Boy.h"
@implementation Man
-(void)setWife:(Woman *)aWife{
wife = aWife;
}
-(void)setSon:(Boy *)aSon{
son = aSon;
}
@end
八:Woman.h文件里:
#import
@classMan,Boy;
@interface Woman : NSObject{
NSString *name;
NSInteger age;
NSString *gender;
Man *husband;
Boy *son;
}
- (void)setHusband:(Man *)aHusband;
- (void)setSon:(Boy *)aSon;
@end
九:Woman.m文件里:
#import "Woman.h"
#import "Man.h"
#import "Boy.h"
@implementation Woman
- (void)setHusband:(Man *)aHusband{
husband = aHusband;
}
- (void)setSon:(Boy *)aSon{
son = aSon;
}
@end
十:Boy.h文件里:
#import
@class Man, Woman;
@interface Boy : NSObject{
NSString *name;
NSInteger age;
NSString *gender;
Man *father;
Woman *mother;
}
- (void)setFather:(Man *)aFather;
- (void)setMother:(Woman *)aMother;
@end
十一:Boy.m文件里:
#import "Boy.h"
#import "Woman.h"
#import "Man.h"
@implementation Boy
- (void)setFather:(Man *)aFather{
father = aFather;
}
- (void)setMother:(Woman *)aMother{
mother = aMother;
}
@end
十二:Family.h文件里:
@class Man, Woman, Boy;
@interface Family : NSObject{
Man *father;
Woman *mother;
Boy *son;
}
-(void)setFather:(Man *)aFather;
-(void)setMother:(Woman *)aMother;
-(void)setSon:(Boy *)aSon;
@end
十三:Family.m文件里:
#import "Family.h"
#import "Woman.h"
#import "Man.h"
#import "Boy.h"
@implementation Family
-(void)setFather:(Man *)aFather{
father = aFather;
}
-(void)setMother:(Woman *)aMother{
mother =aMother;
}
-(void)setSon:(Boy *)aSon{
son = aSon;
}
@end
OC第二讲结束...看不懂的,想要完整可见的,,私聊发给你
相关文章推荐
- 数字电路笔试题目
- OC第三讲(Inherit 继承)
- C语言第七讲(Struct结构体)
- [c/c++]使用宏函数实现的无锁队列
- 验证码生成中"图像因本身错误无法显示的"错误解决办法
- OC第四讲(NSString字符串)
- C语言第八讲(Pointer指针)
- UI_快捷菜单
- C语言第九讲(PointerPro)
- OC知识点重点整理(终极版)
- Compare Version Numbers
- 《zw版·Halcon-delphi系列原创教程》 水果自动分类脚本(机器学习、人工智能)
- VBA 学习
- OC第五讲(NSNumber,NSArray,NSDictionary,NSSet等)
- 计算器
- 牛老师第二次作业
- OC(实现简单通讯录操作)
- OC(实现中等通讯录的操作)
- Ubuntu文件系统的一些基本命令
- ECShop 去掉配送区域