黑马程序员 OC语言 - 3 面向对象(下)
来源:互联网 发布:微博域名可以修改吗 编辑:程序博客网 时间:2024/06/05 05:28
若排版有错误,请查看:http://pan.baidu.com/s/1pJDLqeJ
一、 面向对象的三大特征
(一) 封装
@interface Student : NSObject
{
int _age;
int _no;
}
1. set方法
- (void)setAge:(int)newAge;
作用:
提供一个方法给外界设置成员变量值,可以在方法里面对参数进行相应过滤
命名规范:
1) 方法名必须以set开头
2) set后面跟上成员变量的名称,成员变量的首字母必须大写
3) 返回值一定是void
4) 一定要接收一个参数,而且参数类型跟成员变量类型一致
5) 形参的名称不能跟成员变量名一样
2. get方法
- (int)age;
作用:
返回对象内部的成员变量,只允许外界访问成员变量,不允许修改成员变量
命名规范:
1) 肯定有返回值,返回值类型肯定与成员变量类型一致
2) 方法名跟成员变量名一样
3) 不需要接收任何参数
@end
@implementation Student
// set方法的实现
- (void)setAge:(int)newAge
{
// 对传进来的参数进行过滤
if (newAge <= 0)
{
newAge= 1;
}
_age= newAge;
}
- (int)age
{
return _age;
}
@end
int main()
{
Student *stu = [Studentnew];
[stu setAge:10];
NSLog(@"学生的年龄是%d岁", [stu age]);
return 0;
}
3. 成员变量的命名规范
l 一定要以下划线 _ 开头
作用:
1) 让成员变量和get方法的名称区分开
2) 可以跟局部变量区分开,一看到下划线开头的变量,一般都是成员变量
4. 类方法与对象方法
1) 类方法:直接可以用类名来执行的方法(类本身会在内存中占据存储空间,里面有类方法、对象方法列表)
2) 类方法和对象方法可以同名,也可以相互调用
类方法:
1) 加号 + 开头
2) 只能由类(名)来调用
3) 类方法中不能访问成员变量(实例变量)
4) 不依赖于对象,执行效率高
5) 能用类方法,尽量用类方法
6) 场合:当方法内部不需要使用到成员变量时,就可以改为类方法
对象方法:
1) 减号 - 开头
2) 只能由对象来调用
3) 对象方法中能访问当前对象的成员变量(实例变量)
1. self关键字
self是一个指针,指向方法调用者(当前对象或当前类),谁调用就指向谁。
1) 在对象方法中可用self->成员变量名 访问成员变量
2) [self 方法名]可以调用其他对象方法、类方法,方法名如果与当前方法名相同就会产生死循环
- (void)test
{
// self:指向了方向调用者,代表着当期对象
int _age = 20; // 此_age为局部变量
NSLog(@"Person的年龄是%d岁",self->_age);//不是20,而是当前对象方法的成员变量的值
}
- (void)test
{
[self test]; // 会引发死循环
}
(二) 继承
1. 什么是继承
类A
类B : 类A
就是类B包含类A的所有特征(成员变量、方法),类A称为类B的父类,类B称为类A的子类
2. 基本使用
@interface Animal : NSObject
…
@end
implementation Animal
…
@end
@interface Dog : Animal // (: Animal)继承了Animal,相当于拥有了Animal里面的所有成员变量和方法
@end
@implementation Dog
@end
3. 继承的好处
1) 抽取重复代码
2) 建立了类之间的关系
3) 子类可以拥有父类中的所有成员变量和方法
4. 继承的坏处
耦合性太强
5. 注意点
1) 基本上所有类的根类是NSObject
2) 父类必须声明在子类的前面
3) 不允许子类和父类拥有相同的成员变量,
4) 允许有相同的方法,调用某个方法时,优先去当前类中找,如果找不到,去父类中找
5) 重写:子类重新实现父类中的某个方法,覆盖父类以前的做法
6. 继承的使用场合
1) 当两个类拥有相同属性和方法的时候,就可以将相同的东西抽取到一个父类中
2) 当A类完全拥有B类中的部分属性和方法时,可以考虑让B类继承A类
2. 组合
继承:XX是XXX
组合:XX拥有XXX
@interface Score : NSObject
{
int _cScore;
int _ocScore;
}
@end
@implementation Score
@end
@interface Student : NSObject
{
// 组合
Score *_score;
// int _cScore;
// int _ocScore;
int _age;
}
@end
@implementation Student
@end
3. super关键字
1) 直接调用父类中的某个方法
2) super处在对象方法中,那么就会调用父类的对象方法
3) super处在类方法中,那么就会调用父类的类方法
4) 使用场合:子类重写父类的方法时想保留父类的一些行为
(三) 多态
1. 什么是多态
1) 没有继承就没有多态
2) 多态(多种形态):父类指针指向子类对象。
2. 好处
如果函数、方法参数中使用的是父类类型,可以传入父类、子类对象
3. 局限性
父类类型的变量不能用来调用子类的方法;必须强制转为子类类型才能调用
4. 基本使用
// 动物
@interface Animal : NSObject
- (void)eat;
@end
@implementation Animal
- (void)eat
{
NSLog(@"Animal-吃东西----");
}
@end
// 狗
@interface Dog : Animal
- (void)run;
@end
@implementation Dog
- (void)run
{
NSLog(@"Dog---跑起来");
}
- (void)eat
{
NSLog(@"Dog-吃东西----");
}
@end
// 如果参数中使用的是父类类型,可以传入父类、子类对象
void feed(Animal *a)
{
[a eat];
}
int main()
{
Dog *d = [Dog new]; // Dog类型
Animal *a = [Dog new]; // 多态(多种形态):父类指针指向子类对象
[a eat]; // 输出:Dog吃//调用方法时会检测对象的真实形象
Animal *aa = [Dog new];
//[aa run]; 多态的局限性:父类类型的变量不能用来调用子类的方法;必须强制转为子类类型才能调用
Dog *dd = (Dog *)aa; // 将aa转为Dog*类型的变量
[dd run];
return 0;
}
4. NSString
创建字符串:
1) NSString *str = @"itcast";
2) char *c = "itcast";
NSLog(@"%@", str);
NSLog(@"%s", c);
int age = 15;
int no = 5;
NSString *name = @"哈哈jack";
int size = [name length]; // 6 length方法算的是字数
3) NSString *newStr = [NSStringstringWithFormat:@"My age is %d and no is %d and name is %@", age, no, name];
总结
1. 只有利用类名调用类方法的时候,不需要在类名后面写*。其他情况下,类名后面统一加上一个*
Circle *c1 = [Circle new];
- (BOOL)isInteractWithOther:(Circle *)other;
2. 返回值是BOOL类型的方法,方法名一般都以is开头
- (BOOL)isInteractWithOther:(Circle *)other;
3. 想要拥有某个对象,就先创建对象,然后调用set方法将对象传递给内部的成员变量
//创建圆心对象
Point2D *p1 = [Point2D new];
[p1 setX:1 andY:2];
// 设置圆心
[c1setPoint:p1];
//setPoint方法的实现
- (void)setPoint:(Point2D *)point
{
_point = point;
}
4. 定义一个类分2个文件:.h声明文件、.m实现文件
.h : 成员变量、方法的声明
.m : 方法的实现
5. 如果想使用某一个类,只需要#import类的.h文件即可
- 黑马程序员 OC语言 - 3 面向对象(下)
- 黑马程序员IOS-OC语言-面向对象
- 黑马程序员 OC语言 - 2 面向对象(上)
- 黑马程序员---【OC语言】02面向过程以及面向对象
- 黑马程序员---oc--面向对象
- 黑马程序员---【OC语言】03面向对象之封装
- 黑马程序员-OC语言基础:面向对象语法 一
- 黑马程序员-OC语言基础:面向对象语法 二
- 黑马程序员-OC语言基础:面向对象语法 三
- 黑马程序员-OC语言基础:面向对象语法 四
- 黑马程序员—OC语言面向对象三大特性
- 黑马程序员——OC语言(二)--面向对象三大特性
- 黑马程序员—OC语言基础—面向对象的三大特性(1)
- 黑马程序员—OC语言基础—面向对象的三大特性(2)
- 黑马程序员-OC语言-面向对象编程概念(听课笔记)
- 黑马程序员—OC—面向对象(二)
- 黑马程序员—OC—面向对象(一)
- 黑马程序员--oc:面向对象语法
- 15道使用频率极高的基础算法题
- [简单dp]toj1179
- 学生管理系统开发代码分析笔记:jsp+java bean+servlet技术
- 扫盲贴---什么是封釉?车漆镀膜或者镀晶?
- Nodejs安装express提示不是内部或外部命令
- 黑马程序员 OC语言 - 3 面向对象(下)
- 黑马程序员_Java基础语法
- OpenBTS在GSM网络中设置
- Listview
- 程序员,周末是你充电的时候
- Windows系统下nodejs安装及配置
- PV读者写者问题
- 黑马程序员 OC语言 - 4 OC特有语法
- NYOJ-取石子(六)