黑马程序员——OC语言——三大特性
来源:互联网 发布:迅雷for mac os10.6.8 编辑:程序博客网 时间:2024/06/10 11:03
———Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ———
一、封装
1、set和get方法
set方法
- (void)setAge:(int)newAge;
提供一个方法给外界设置成员变量值
get方法1> 方法名必须以set开头
2> set后面跟上成员变量名称,首字母必须大写
3> 返回值一定是void
4> 一定要接收一个与成员变量类型一致的参数
5> 形参不能与成员变量同名
- (int)age;
返回对象内部的成员变量
1> 肯定有返回值,与成员变量类型一样
2> 方法名跟成员变量名一样
3> 不需要接收参数
成员变量
1> 成员变量都以_开头,便于区分
2> 尽量不要使用@public,以便更好实现封装
#import <Foundation/Foundation.h>
@interface Car : NSObject
{
int _wheels;
}
// set方法声明
- (void)setWheels:(int)wheels;
// get方法声明
- (int)wheels;
@end;
@inplementation Car
// set方法实现
- (void)setWheels:(int)wheels
{
_wheels = wheels;
}
// get方法实现
- (int)wheels
{
return _wheels;
}
@end
2、self
当成员变量和局部变量同名时,系统就会采取就近原则,访问局部变量,而不是访问成员变量。
这时,我们可以用self访问成员变量,区分同名的局部变量。
使用场合:所有OC方法中,包括对象方法和类方法,不能用于函数。
用法:谁调用当前方法,self就代表谁(方法调用者)
self出现在对象方法中,self代表对象
self出现在类方法中,self代表类
格式:
1> self -> 成员变量名
访问当前方法调用的成员变量
2> [self 方法名]
调用方法(对象/类方法)
常见错误:
1> 用self调用函数
2> 类方法中用self调用对象方法,对象方法中用self调用类方法
3> self死循环
@implementation Car
- (void)test
{
// 死循环
[self test];
}
@end二、继承
* 将具有相同属性和行为的类,抽取出一个父类;
* 子类在父类的基础上,再扩充属性和方法;
* 子类的方法和属性的访问过程:先去子类里面找,如果子类没有,再去父类里面找;
* 父类被继承了,但是还是可以照常使用这个类;
* 全部OC类的最终父类是NSObject,包含很多常用方法,例如+new;
*专业术语:父类/超类 superclass、子类 subclass/subclasses
#import <Foundation/Foundation.h>
// Animal声明
@interface Animal : NSObject
{
double _weihgt;
}
- (void)eat;
@end
//Animal实现
@implementation Animal
- (void)eat
{
NSLog(@"体重是%d的动物吃东西了",_weight);
}
@end
// Dog声明
// :Animal代表继承了Animal,拥有了Animal里面所有的成员变量和方法
// Animal称为Dog的父类,Dog称为Animal的子类
@interface Dog : Animal
{
int _age;
}
- (void)run;
@end
// Dog实现
@implementation Dog
- (void)run
{
NSLog(@"%d岁的狗跑起来了",_age);
}
@end
1、继承的好处和坏处
好处:1> 不改变原来模型的基础上,扩充方法;
2> 建立了类与类之间的联系;
3> 抽取了公共的代码,减少代码编写;
4> 子类可以拥有父类的所有成员变量和方法。
坏处:耦合性强,改一类而动很多类。
2、继承的使用场合
1> 当两个类拥有相同的属性和方法的时候,就可以将相同的东西抽取到一个父类中;
2> 当A类完全拥有B类中部分属性和方法时,可以考虑让B类继承A类,或考虑B类组合A类。
3、继承的注意事项
1> 继承是单继承,不能继承自多个类;
2> 父类必须声明在子类前面;
3> 子类和父类不能有相同的成员变量;
4> 子类可以重写父类的方法。
4、super
格式:[super 方法名];
super的作用:直接调用父类中的某个方法
super在对象方法中,就调用父类的对象方法
super在类方法中,就调用父类的类方法
5、继承和组合
继承:xxx 是 xx
组合:xxx 拥有 xx
#import <Foundation/Foundation.h>
@interface Score : NSObject
{
int _cScore;
int _ocScore;
}
@end
@inplementation Score
@end
// 学生不是成绩,只是拥有成绩,所以不用继承
@interface Student : NSObject
{
// 组合
Score *_score;
int _age;
}
@end
三、多态
1、基本概念
某一类事物的多种形态
OC对象具有多态性
2、多态的实现
Person *p = [Student new];
p -> age = 24;
[p study];
1> 没有继承就没有多态
2> 子类对象赋值给父类指针,父类指针可以访问对应成员变量和方法
3> 调用方法时会检测对象的真实类型
3、好处与局限性
好处:如果函数、方法参数中使用的是父类类型的,可以传入父类、子类对象。
局限性:不能访问子类的属性(成员变量),
不能调用子类特有的方法(子类有父类没有的方法)(除非强制类型转换)
#import <Foundation/Foundation.h>
@interface Animal : NSObject
- (void)eat;
@end
@implementation Animal
- (void)eat
{
NSLog(@"Animal吃东西");
}
@end
@interface Dog : Animal
- (void)run;
@end
@implementation Dog
- (void)eat
{
NSLog(@"Dog吃东西");
}
- (void)run
{
NSLog(@"Dog跑起来了");
}
@end
// 若形参中使用父类类型,可传入父类对象和子类对象
void feed(Animal *a)
{
// 运行时会动态检测a对象的真实类型
[a eat];
}
int main()
{
// 多态:父类指针指向子类对象
Animal *aa = [Dog new];
feed(aa);
// [aa run]编译器警告
// 强制类型转换
Dog *dd = (Dog *)aa;
[dd run];
}
- 黑马程序员——OC语言三大特性
- 黑马程序员—OC语言面向对象三大特性
- 黑马程序员————oc三大特性
- 黑马程序员—OC—三大特性
- 黑马程序员——OC三大特性之封装
- 黑马程序员——OC基础三大特性
- 黑马程序员——02OC三大特性
- 黑马程序员——OC三大特性-5:封装
- 黑马程序员——OC三大特性-6:继承
- 黑马程序员——OC三大特性-7:多态
- 黑马程序员—OC之三大特性
- 黑马程序员——OC语言——三大特性
- 黑马程序员——OC语言基础——面向对象三大特性之封装
- 黑马程序员——OC语言基础——面向对象三大特性之继承
- 黑马程序员——OC语言基础——面向对象三大特性之多态
- 黑马程序员——OC语言(二)--面向对象三大特性
- 黑马程序员——OC语言基础篇---面向对象之三大特性
- 黑马程序员——OC语言基础:面向对象三大特性,封装、继承、多态
- DVSDK 4G-TF卡分区失败
- windows命令
- 复习题解析
- 字符串加密
- 周考题解析
- 黑马程序员——OC语言——三大特性
- 指针是一个保存对象地址的变量,地址是一种数据类型
- php5.4.36中APC与APCu的对比与感觉
- 在公司做的第一次技术分享
- Q侠传
- java method TestJava4_8,java方法演示
- Linux网络编程常见服务器模型
- Linux Terminalogies
- SharePoint 2013 Nintex Workflow 工作流帮助(三)