黑马程序员——OC 基础:实例变量修饰符,description方法和多态
来源:互联网 发布:2016免费翻墙软件 编辑:程序博客网 时间:2024/06/16 12:57
1.实例变量修饰符
1)@public(公开的)在有对象的前提下,任何地方都可以直接访问。
2)@protected (受保护的)只能在当前类和子类的对象方法中访问。
3)@private (私有的)只能在当前类的对象方法中才能直接访问。
4)@package (框架级别的)作用域介于私有和公开之间,只要处于同一框架就可以直接通过变量名访问。
注意:
1)在@interface @end之间声明的成员变量如果不作特别的说明,那么其默认是protected的。
2)一个类继承了另一个类,那么就拥有了父类的所有成员变量和方法,注意所有的成员变量它都有,只是有的它不能直接访问。
2.description方法
description方法是基类NSObject所带的方法,因为其默认实现是返回类名和对象的内存地址,这样的话,使用NSLog输出OC对象,意义就不是很大,因为我们并不关心,对象的内存地址,比较关心的是对象内部的一些成员变量值。因此,会经常重写description方法,覆盖description方法的默认实现。
description方法默认返回对象的描述信息(默认实现是返回类名和对象的内存地址)
NSLog(@"%@", objectA); //这会自动调用objectA的description方法来输出ObjectA的描述信息。
discription方法的使用
#import <Foundation/Foundation.h>
@interface Person : NSObject
{
@public
int _age;
NSString *_name;
}
@end
@implementation Person
// 重写父类的description对象方法
-(NSString *)description{
return [NSStringstringWithFormat:@"姓名:%@,年龄: %d",_name,_age];
}
// 重写父类的description类方法
+(NSString *)description{
return@"调用了description类方法";
}
@end
int main(int argc,const char * argv[]) {
@autoreleasepool {
// 创建对象并赋值
Person *p = [Personnew];
p -> _age = 13;
p ->_name = @"luoli";
// 调用p的description方法
NSLog(@"%@", p);
// 利用对象调用description类方法
NSLog(@"%@",[pclass]);
}
return 0;
}
3.1.什么是多态?
多态就是某一类事物的多种形态。比如:小萝莉是女人,同时也是人,同时也是动物。
程序中的多态:不同的对象以自己的方式响应相同名称方法的能力称为多态。
多态的代码体现:用父类的指针指向了子类对象
Person *p = [loli new];
3.2.多态的条件
1)有继承关系
2)有方法重写:子类重写了父类的同名方法。
3)父类的声明变量指向子类对象
3.3.多态的优点
多态的主要好处就是简化了编程接口。它容许在类和类之间重用一些习惯性的命名,而不用为每一个新加的函数命名一个新名字。
3.4.多态的实现:
#import <Foundation/Foundation.h>
@interface Animal : NSObject
-(void)run;
@end
@implementation Animal
-(void)run{
NSLog(@"动物跑");
}
@end
@interface Dog : Animal // 狗类继承了动物类
-(void)eat;
@end
@implementation Dog
-(void)run{
NSLog(@"狗跑");// 重写了run方法
}
-(void)eat{
NSLog(@"狗吃");
}
@end
int main(int argc,const char * argv[]) {
@autoreleasepool {
//用父类指针指向了子类对象
Animal *dog1 = [Dognew];
[dog1 run]; // 调用的是狗类的方法
//[dog1 eat]; 报错,dog1是Animal类型的对象
[(Dog *)dog1eat];// 多态的情况下用父类类型的对象调用子类的方法应该先把对象强制转换成子类类型
}
return 0;
}
- 黑马程序员——OC 基础:实例变量修饰符,description方法和多态
- 黑马程序员---OC基础---封装、继承、多态、@property、id类型、实例变量修饰符
- 黑马程序员——ObjectiveC基础——继承与实例变量修饰符
- 黑马程序员——OC基础---核心语法(id,构造方法,Category,description,SEL)
- 黑马程序员——OC语言基础---description方法介绍及重写
- 黑马程序员-OC-description方法
- 黑马程序员——OC基础——category、description和SEL
- OC学习日记-继承,多态,私有属性、变量和方法,self,super,属性修饰符,description
- 黑马程序员-OC-自定义构造方法和description方法
- 黑马程序员-------OC----构造方法和description方法
- 13、黑马程序员-OC语言description方法和sel
- 黑马程序员--OC--分类和重新定义description方法
- 黑马程序员——OC 基础:setter和getter方法
- 黑马程序员——OC语言基础---对象和方法
- 黑马程序员—OC基础-- ==和 isEqual方法
- OC基础—description方法、SEL类型
- 黑马程序员---oc description
- 黑马程序员——OC语言日志——description方法介绍及重写
- 一个简单的C/C++多线程
- C/C++ 函数指针,强制转换示例
- C++ 实现杨辉三角
- Python yield 用法
- 使用CNN(convolutional neural nets)检测脸部关键点教程(三):卷积神经网络训练和数据扩充
- 黑马程序员——OC 基础:实例变量修饰符,description方法和多态
- Combination Sum
- 飞机大战-SmallPlane和MiddlePlane两种敌机的实现
- Spring学习总结(2.2)-Spring MVC:DispatcherServlet
- linux启用ftp服务
- (四) Python的缩进
- Andorid工程师的职业生涯
- STM32硬件开发还是linux开发
- http://blog.sina.com.cn/s/blog_a3d2fd2d0101hyu7.html