05.黑马程序员-继承、super关键字和多态

1.  继承


1.1  继承的专业术语

父类/超类 superclass

子类 subclass/subclasses


1.2  继承的使用场合

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


  继承:xx 是 xxx
  组合:xxx 拥有 xxx

 A
 {
    int _age;
    int _no;
 }
 
 B : A
 {
    int _weight;
 }
 
 // 继承:xx 是 xxx
 // 组合:xxx 拥有 xxx
 
 2.组合
 A
 {
     int _age;
     int _no;
 }
 
 B
 {
     A *_a;
     int _weight;
 }

1.3  继承的优点和缺点

 继承的好处:
 1> 抽取重复代码
 2> 建立了类之间的关系
 3> 不改变原来模型的基础上,扩充方法

继承的缺点:

耦合性强


1.4  注意点

 1> 父类必须声明在子类的前面
 2> 子类不能拥有和父类相同的成员变量

 3> 调用某个方法时,优先去当前类中找,如果找不到,去父类中找

 4>单继承


1.5  重写

子类重新实现父类中的某个方法,覆盖父类以前的做法


2.  super关键字

 super的作用
 1.直接调用父类中的某个方法
 2.super处在对象方法中,那么就会调用父类的对象方法
   super处在类方法中,那么就会调用父类的类方法
 
 使用场合:子类重写父类的方法时想保留父类的一些行为


3.多态


3.1  多态的基本概念

没有继承就没有多态

某一个事物的多种形态

OC对象具有多态性


3.2  多态的体现

Person *p = [Student new];
p->age = 100;
[p walk];

子类对象赋值给父类指针

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


3.3  多态的优缺点

优点:如果函数\方法参数中使用的是父类类型,可以传入父类、子类对象

缺点: 父类类型的变量 不能 直接调用子类特有的方法。必须强转为子类类型变量后,才能直接调用子类特有的方法

以下代码中Animal是父类,Dog是子类,run方法是Dog的对象方法

    Animal *aa = [Dog new];
    // 多态的局限性:父类类型的变量 不能 用来调用子类的方法
    //[aa run];
    
    // 将aa转为Dog *类型的变量
    Dog *dd = (Dog *)aa;
    
    [dd run];

3.4  多态的细节

动态绑定:在运行时根据对象的类型确定动态调用的方法

以下代码中Animal是父类,Dog是子类,[a eat]调用的时Dog的eat方法

  // 多态:父类指针指向子类对象
    Animal *a = [Dog new];
    
    // 调用方法时会检测对象的真实形象
    [a eat];


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值