黑马程序员_OC基础04_面向对象三大特性

---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------


一、封装

1、概念

把对象的属性和行为封装成一个独立的单位,并尽可能隐蔽其内部细节

2、作用

1> 更加接近人类的思考方式

2> 只需要关注对象,不需要关注步骤

3> 提高类和系统的安全性

3、使用方法

类、setter、getter都是封装的体现


二、继承

1、概念

继承是一种由已有类创建新类的机制,利用继承,可以先创建一个共有属性的一般类,根据这个一般类再创建具有特殊属性的新类。

被继承的类称为父类或超类(superclass),继承类成为子类(subclass)

2、作用

在不改变原来模型的基础上,拓充方法,同时建立了类与类之间的联系,抽取了公共代码。

坏处:耦合性强(依赖性强)

3、使用方法


@interface Animal : NSObject // Animal的声明
{
    int weight;
}
- (void)eat;
@end

@implementation Animal // Animal的定义
- (void)eat 
{
    NSLog(@"吃-体重:%d", weight);
}
@end

@interface Bird : Animal // Bird的声明
{
    int height;
}
- (void)fly;
@end

@implementation Bird// Bird的定义
- (void)fly 
{
    NSLog(@"飞-高度:%d", height);
}
@end

@interface Dog : Animal // Dog的声明
{
    int speed;
}
- (void)run;
@end

@implementation Dog // Dog的定义
- (void)run {
    NSLog(@"跑-速度:%d", speed);
}
@end

①狗和鸟抽取出一个动物父类,他们继承了父类的体重属性和吃方法

②狗拥有自己的属性速度和跑方法,鸟拥有自己的高度属性和飞方法

设计时,另一个类的所有属性都是你需要的,就继承它,如果只是部分属性跟你一致,就提取出一个父类。

特殊情况:一个学生类有数学、英语、语文成绩,一个成绩类也有数学、英语、语文成绩。

                   这时继承在逻辑上不合理,可以采用组合的方式,即在学生类里声明一个成绩类的成员变量。


4、注意点

①子类拥有父类的所有成员变量及方法,所以不能定义同名的成员变量,但可以重写父类的方法。

②在调用子类的成员变量或方法时,会去先访问子类,如果没有,则去父类中找。(NSObject是所有类的父类,alloc和init方法就是继承它的)

③OC是单继承,即只能有一个父类。

④当子类和父类有同名的方法时,会访问子类方法,如果想访问父类方法需使用super关键字

(在对象方法中只能调用父类的对象方法,类方法只能调用类方法,不能混用)


三、多态

1、概念

多态性是指允许不同类的对象对同一消息作出响应(父类指针指向子类对象)

2、作用

如果函数或方法参数中使用的是父类类型,可以传入父类和子类对象,节省代码量、易扩展。

3、使用方法

例:喂食这个方法定义的是animal类,那它的子类bird、dog对象都可以当做参数传入。

void feed(Animal *a)
{
    [a eat];
}

int main()
{
    Dog *d = [[Dog alloc] init];
    feed(d);
    Animal *a = [[Dog alloc] init]; //将子类对象给了父类类型的指针
    [a eat]; // 这时会调用子类中的eat方法
}

4、注意点

1>没有继承就没有多态

2>调用方法时会动态检测对象的真实类型

3>父类类型变量不能直接调用子类对象的特有方法,必须强制转换为子类类型变量后才可调用


---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------详细请查看:www.itheima.com

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值