黑马程序员——OC的三大特性:封装、继承、多态

—Java培训、Android培训、iOS培训、.Net培训、期待与您交流—

一、封装

1.封装的定义

隐藏对象的属性和方法的实现细节,对外只公开接口用来调用

2.set方法和get方法

<1>set方法
a.作用:提供一个方法给外界设置成员变量值,可以在方法里面对参数进行相应过滤,以保证数据的安全性

b.命名规范:
1>.方法名必须以Set开头
2>.Set后面跟上成员变量的名称,成员变量的首字母必须大写
3>.返回值一定是void
4>.一定要接收一个参数,而且参数类型跟成员变量类型一致
5>.形参的名称不能跟成员变量名一样

<2>get方法
a.作用:返回对象的成员变量

b.命名规范
1>.肯定有返回值,返回值类型肯定与成员变量类型一致
2>.方法名跟成员变量名一样
3>.不需要接收任何参数

3.成员变量的命名规范

一定要以下划线—开头

作用:
1>.让成员变量名和get方法的名称区分开
2>.可以跟局部变量区分开,一看到下划线开头的变量,一般都是成员变量

示例:set和get方法的声明

#import <Foundation/Foundation.h>
@interface Student : NSobject
{
  int _age;

}

- (void)setAge:(int)age; //成员变量_age的set方法声明

- (int)age;   //成员变量_age的get方法声明

- (void)study; //study的方法声明

@end

示例:set和get方法的实现

@implementation Student

//set方法的实现
- (void)setAge: (int)age
{
    //对传进来的参数进行过滤
    if(age <= 0) 
    {
       age = 1;
    }
      _age = age;
}

- (int)age
{
   return _age;

}
_ (void)study
{
  NSLog(@"%d岁的学生在学习",_age);
}

@end
int main()
{
  Student *stu = [Student new];

  [stu setAge:10];//也可以写成 stu->age = 10;或者self->age = 10;

  [stu study];

  return 0;

}

4.类方法和对象方法

a.对象方法

1> 减号 -开头

2> 只能由对象来调用

3> 对象方法中能访问当前对象的成员变量(实例变量)

b.类方法

1> 加号 +开头

2> 只能由类(名)来调用

3> 类方法中不能访问成员变量(实例变量)

c.类方法的好处和使用场合

1>.不依赖于对象,执行效率高

2>.能用类方法,尽量用类方法

3>.可以允许类方法和对象方法同名

4>.场合:当方法内部不需要使用到成员变量时,就可以改为类方法

5.self的用途:

1>.谁调用了当前方法,self就代表谁

self出现在对象方法中,self就代表对象

self出现在类方法中,self就代表类

2> 在对象方法利用”self->成员变量名”访问当前对象内部的成员变量

3> [self 方法名]可以调用其他对象方法\类方法

6.super的作用

1.直接调用父类中的某个方法

2.super处在对象方法中,那么就会调用父类的对象方法

super处在类方法中,那么就会调用父类的类方法

3.使用场合:子类重写父类的方法时想保留父类的一些行为

4.格式:[super 方法名]

二、继承

1.继承的好处:

1>.抽取重复代码

2>.建立了类之间的关系

3>.子类可以拥有父类中的所有成员变量和方法

2.继承的注意点:

1>.基本上所有类的根基是NSObject
2>.父类必须声明在子类的前面
3>.子类不能拥有和父类相同的成员变量
4>.调用某个对象方法时,优先去当前对象中找,如果找不到,去父类中找。
5>.重写是子类重新实现父类中的方法,覆盖父类以前的做法

3.继承的使用场合

1>.当两个类拥有相同属性和方法的时候,就可以将相同的东西抽取到一个父类中
2>.当A类完全拥有B类的部分属性和方法时,可以让B类继承A类

4.继承和组合

继承:XX是XXX
组合:XXX拥有XX
示例:仅仅只是做个简单介绍

//下面分别是学生类的声明和分数类的声明,它们是同等级的,都继承NSObject这个根类
@interface Student : NSObject
@interface Score : NSObject
Score *_score;//代表学生类里面也拥有这个分数

三、多态
1、多态的基本认识

 1>.某一类事物的多种形态

 2>.OC对象具有多态性

2、多态的体现

1>.子类对象赋值给父类指针

2>.父类指针访问对应的属性和方法

示例:

#import <Foundation/Foundation.h>
@interface Animal : NSObject
- (void)eat;
@end

@implementation Animal
- (void)eat
{
  NSLog(@"Animal-吃东西---");
}
@end

@interface Dog : Animal
@end

@implementation Dog
- (void)eat
{
  NSLog(@"Dog-吃东西---");
}
@end

int main()
{
  //多态:父类指针指向子类对象
  Animal *a = [Dog new];
  [a eat]; //当调用一个方法时,是动态检测这个方法有没有被实现,其实它的真实类型不是Animal,而是Dog,所以最终输出的结果是Dog-吃东西
  return 0;
}

3.多态的注意点

1>.父亲类型的变量不能用来调用子类的方法,必须强转为子类类型变量后,才能直接调用父类特有的方法。

例如:

Animal *a = [Dog new];//在这里Animal是Dog的父类
   Dog *d = (Dog *)a;//强制转换跟int a = (int)1.05;道理一样
  [d run];

2>.没有继承就没有多态
3>.代码的体现是父类类型的指针指向子类对象,例如:Animal *a = [Dog new];
4>.如果函数或者方法参数中使用的是父亲类型,可以传入父类、子类对象

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值