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

来源:互联网 发布:linux函数 sleep 编辑:程序博客网 时间:2024/05/18 21:39

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];


0 0
原创粉丝点击