13、OC 面向对象3大特征:封装、继承、多态

一、封装
封装指将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部信息,而是通过该类所提供的方法来实现对内部信息的操作和访问。
好处:隐藏类的内部实现细节;限制对成员变量的不合理访问;有利于保证对象信息的完整性;便于修改,提高代码可维护性。

二、继承
继承指可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。
OC采用的是单继承的方式,每个子类有且只有一个父类,但是可以有多个间接父类。
覆盖(Override):子类包含与父类同名的方法。
super关键字:用于限定该对象调用它从父类继承得到的属性或方法。super不能出现在类方法中。
继承需要注意以下几点:
1.子类可以得到父类中定义的成员变量,但是子类接口部分不允许定义与父类重名的成员变量,无论父类是用了何种访问修饰符。
2.子类实现部分可以定义与父类重名的成员变量,这样子类成员变量会隐藏父类成员变量,如需访问父类成员变量,可以使用super关键字。
3.OC采用的是单继承。

三、多态
多态指:不同对象对同一消息有不同响应方式。
OC指针类型的变量有两个,一个是编译时类型,一个是运行时类型;编译时类型由声明该变量时使用的类型决定,运行时的类型由实际赋给该变量的对象决定;如果编译时类型和运行时类型不一致,当访问同一个方法时会做出不同的响应,这时就会出现多态。
看一个多态的例子:
父类:
#import <Foundation/Foundation.h>
@interface Base : NSObject
-(void)sayHello;
@end

#import "Base.h"
@implementation Base
-(void)sayHello{
    NSLog(@"父类说:Hello");
}
@end

子类:
#import <Foundation/Foundation.h>
#import "Base.h"
@interface SubClass : Base
-(void)sayHello;
-(void)sayHaha;
@end

#import "SubClass.h"
@implementation SubClass
-(void)sayHello{
    NSLog(@"子类说:Hello");
}
-(void)sayHaha{
    NSLog(@"子类说:哈哈");
}
@end

测试:
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        //编译时和运行时类型一致
        SubClass* sc = [[SubClass alloc]init];
        [sc sayHello];
        [sc sayHaha];
        //编译时和运行时类型不一致
        Base* ba = [[SubClass alloc]init];
        [ba sayHello];
        //下面一行有错,因为编译时类型没有这个方法
        //[ba sayHaha];
       
        //可以使用id类型来访问编译时没有但运行时有的方法
        id myBa = ba;
        [myBa sayHaha];
    }
    return 0;
}


输出:
子类说 :Hello
子类说 : 哈哈
子类说 :Hello
子类说:哈哈



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值