OC-继承,多态,self,super

来源:互联网 发布:windows文件损坏r修复 编辑:程序博客网 时间:2024/06/06 04:43

继承

定义:一个新类可以从现有的类中派生出来,这个过程称为继承。
语法:

这里写图片描述

注意:

  • 继承是面向对象编程的重要语法,OC是单继承;
  • 通过继承可以拥有父类的全部方法和属性,比如我们可以把一个可变对象当做不可变对象使用,反之则不行;
  • 一般情况下,继承NSObject
    类。

继承的特点:
使用继承可以实现代码的复用,减少代码冗余;
Objective-C中一个类可以继承另一个类;
子类可以直接“拥有”父类中所有允许子类继承的成员和方法;
子类可以改变父类中已有的方法,执行同的代码实现。

这里写图片描述

这里写图片描述

关键字self

  • 在类的方法中替代自身,或者说替代调方法的角色。(实例方法中为调方法的对象,类方法中为类本身)
  • 可以直接调用本类或父类的方法。(方法重名时会直接调用本类的方法)
//可以通过如下方式去打印self@interface Person : NSObject- (void)testSelf1;+ (void)testSelf2;@end@implementation Person- (void)testSelf1{    NSLog(@"%@",self);}+ (void)testSelf2{    NSLog(@"%@",self);}@end

关键字super

  • 在类的方法中替代父类
  • 只能用来调用父类的方法。(类中方法名与父类完全相同时,如果想要调用父类的方法,只能使用super,例如init方法)
@interface Student: Person- (void)sayHello;@end@implementation Student- (void)sayHello{    NSLog(@”大家好”);    [super sayHello];}@end

多态

  • 定义(Polymorphism):在面向对象语言中,接口的多种不同的实现方式即为多态。换句话说,不同对象对同一消息的不同响应。

  • 子类可以重写父类的方法,多态就是允许方法重名,参数或返回值可以是父类型传入或返回。

这里写图片描述

常见问题:

为什么在重写init方法和自定义init方法的时候都要必须要首先调用父类的init方法 ?面向对象继承的概念,一个子类从父类继承,获得相关的属性和方法,所以在子类的初始化方法中,必须首先调用父类的初始化方法,以实现父类相关资源的初始化。也就是任何一个对象初始化完成之后,必须包含所有继承体系的属性和方法super init是完成本类对象的父类特征的初始化所以通过super init来传递这个初始化事件
针对dealloc里面的[super dealloc]你所创建的每个类都是从父类,根类继承来的,有很多实例变量也会继承过来,这部分变量有时候会在你的程序内使用,它们不会自动释放内存,你需要调用父类的 dealloc方法来释放
1 0