黑马程序员技术交流社区
标题: 每日小结:封装与类方法 [打印本页]
作者: 崔石炫 时间: 2014-9-21 17:31
标题: 每日小结:封装与类方法
封装作为面向对象的三大核心特性之一,具有重要意义。
封装将对象的数据与操作隔离开,通过向外部提供操作数据的接口来隐藏类的细节实现。
类方法的调用不依赖于对象,其调用者为类,比如:[Class ClassMethod],Class类执行ClassMethod行为,而[instance ClassMethod]这种用法是错误的,不能通过instance对象调用类方法ClassMethod;这就意味着类方法中无法访问成员变量,因为成员变量只有实例化对象之后才存在。类通常应用在不需要访问任何成员变量的场景,比如:工具类。
参考一下代码:
#import <Foundation/Foundation.h>
@interface Person : NSObject
{
//此处没有@public关键字,外界无法通过指针直接访问成员变量
int _age;
double_weight;
}
- (void)setAge:(int)newAge;//set方法用于设置_age的值
- (int)age;// get方法用于获取_age的值
- (void)setWeight:(double)newWeight; //set方法用于设置_weight的值
- (double)weight; // get方法用于获取_weight的值
- (void)speak;//对象方法,人类的一种行为:说话
- (void)walk; //对象方法,人类的一种行为:走路
- (void)run; //对象方法,人类的一种行为:跑步
+ (void)introduction;//类方法(以加号+开头,其余语法与对象方法相同),人类的简介
@end
@implementation Person
- (void)setAge:(int)newAge
{
self._age= newAge;/*self关键字,其本质是一个指针,指向该关键字所出现的方法的调用者。即,self出现在对象方法中时,self指向一个对象,出现在类方法中时,self指向类。self关键字可用于调用其自身代表的类的其他类方法,或自身代表的对象的其他方法和成员变量*/
}
- (int)age
{
returnself._age;
}
- (void)setWeight:(double)newWeight
{
self._weight= newWeight;
}
- (double)weight
{
returnself._weight;
}
- (void)speak
{
NSLog(@”年龄为:%d,体重为:%f的人说话”, _age, _weight);
}
- (void)walk
{
NSLog(@”年龄为:%d,体重为:%f的人走路”, _age, _weight);
}
- (void)run
{
NSLog(@”年龄为:%d,体重为:%f的人跑步”, _age, _weight);
}
+ (void)introduction;
{
//NSLog(@”年龄为:%d,体重为:%f的人的简介”, _age,_weight);//错误的用法,类方法的调用者为类,无法访问对象的成员变量
NSLog(@”人类是地球上有史以来最具智慧的生物,也是地球目前居于统治者地位的物种。”);
}
@end
int main()
{
Person*p = [Person new];
//p->_age= 24;//错误的用法,_age属性不是public的,外界无法用指针访问
[psetAge:24];//必须通过set方法修改
//NSLog(@”这个人的年龄为:%d岁。”, p->_age);//错误的用法,_age属性不是public的,外界无法用指针访问
NSLog(@”这个人的年龄为:%d岁。”, [p age]);//必须通过get方法获取
//[pintroduction];//错误的用法,introduction方法为类方法,无法通过对象调用
[Personintroduction];//类方法的调用不依赖对象的存在,合法调用者为类本身,而不是对象
return0;
}
作者: 崔石炫 时间: 2014-9-21 17:34
没有mac,只能用Word记录,也无法验证代码的正确性,有错误希望大家指出来,共勉。
作者: Kevinneo 时间: 2014-9-22 07:58
http://www.onlinedown.net/soft/560975.htm 可以在windows下运行Oc 需要就拿去 楼主的学习精神赞一个
作者: 崔石炫 时间: 2014-9-23 17:06
谢啦
我去试试看,看能不能吃得消,我的电脑不行了,入学成功就去买个mac
作者: AngleMGG 时间: 2014-9-23 20:50
基本没有太大的问题,在这里所有的self都报错了
- Person.h文件
- #import <Foundation/Foundation.h>
- @interface Person : NSObject
- {
- //此处没有@public关键字,外界无法通过指针直接访问成员变量
- int _age;
- double _weight;
- }
- - (void)setAge:(int)age;//set方法用于设置_age的值
- - (int)age;// get方法用于获取_age的值
- - (void)setWeight:(double)weight; //set方法用于设置_weight的值
- - (double)weight; // get方法用于获取_weight的值
- - (void)speak;//对象方法,人类的一种行为:说话
- - (void)walk; //对象方法,人类的一种行为:走路
- - (void)run; //对象方法,人类的一种行为:跑步
- + (void)introduction;//类方法(以加号+开头,其余语法与对象方法相同),人类的简介
- @end
复制代码- Person.m文件
- #import "Person.h"
- @implementation Person
- - (void)setAge:(int)age
- {
- _age= age;/*self关键字,其本质是一个指针,指向该关键字所出现的方法的调用者。即,self出现在对象方法中时,self指向一个对象,出现在类方法中时,self指向类。self关键字可用于调用其自身代表的类的其他类方法,或自身代表的对象的其他方法和成员变量*/
- }
- - (int)age
- {
- return _age;
- }
- - (void)setWeight:(double)weight
- {
- _weight= weight;
- }
- - (double)weight
- {
- return _weight;
- }
- - (void)speak
- {
- NSLog(@"年龄为:%d,体重为:%f的人说话", _age, _weight);
- }
- - (void)walk
- {
- NSLog(@"年龄为:%d,体重为:%f的人走路", _age, _weight);
- }
- - (void)run
- {
- NSLog(@"年龄为:%d,体重为:%f的人跑步", _age, _weight);
- }
- + (void)introduction;
- {
- //NSLog(@”年龄为:%d,体重为:%f的人的简介”, _age,_weight);//错误的用法,类方法的调用者为类,无法访问对象的成员变量
-
- NSLog(@"人类是地球上有史以来最具智慧的生物,也是地球目前居于统治者地位的物种。");
- }
- @end
复制代码- main.m文件
- #import <Foundation/Foundation.h>
- #import "Person.h"
- int main()
- {
- Person *p = [Person new];
-
- //p->_age= 24;//错误的用法,_age属性不是public的,外界无法用指针访问
- [p setAge:24];//必须通过set方法修改
-
- [p setWeight:60];
-
- //NSLog(@”这个人的年龄为:%d岁。”, p->_age);//错误的用法,_age属性不是public的,外界无法用指针访问
- NSLog(@"这个人的年龄为:%d岁。",[p age]);//必须通过get方法获取
-
- [p speak];
-
- [p walk];
-
- [p run];
-
- //[p introduction];//错误的用法,introduction方法为类方法,无法通过对象调用
- [Person introduction];//类方法的调用不依赖对象的存在,合法调用者为类本身,而不是对象
-
- return 0;
- }
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |