zoukankan      html  css  js  c++  java
  • 06-继承

    1、继承的概念

      Dog类:具有 _age(年龄) 和 _weight(体重) 的属性,和 run(跑) 的行为(方法);

      Cat类:具有 _age(年龄) 和 _weight(体重) 的属性,和 run(跑) 的行为(方法);

      二者具有相同的属性和行为,在编写代码过程中,会出现重复代码,影响效率。

    因此,我们抽取两个类的共性,定义一个动物类Animal。

    狗和猫都是动物,所以可以说Dog和Cat类继承Animal类,Dog和Cat称为Animal的子类,Animal称为Dog和Cat的父类。

    继承是代表两个类之间的关系: XXX  是  XXX

    假设有2个类:类A 类B,类B是类A  例如:Student 是  Person

        类B 继承 类A,则类B就具有类A 的所有成员变量和方法。 代码表示为 B : A   英文冒号  : 代表继承的意思

        Student 继承 Person,则Student是Person的子类,Person是Student的父类。

    :NSObject 说明NSObject是基本上所有类的基类,它没有父类。

    OC中有两个基类: NSObject  和 NSProxy,但是一般都用NSObject。

    先看代码:    

     1 #import <Foundation/Foundation.h>
     2 /*
     3  1.继承的好处:
     4  1> 抽取重复代码
     5  2> 建立了类之间的关系
     6  3> 子类可以拥有父类中的所有成员变量和方法
     7  
     8  2.注意点
     9  1> 基本上所有类的根类是NSObject
    10  */
    11 
    12 
    13 /********Animal的声明*******/
    14 @interface Animal : NSObject
    15 {
    16     int _age;
    17     double _weight;
    18 }
    19 
    20 - (void)setAge:(int)age;
    21 - (int)age;
    22 
    23 - (void)setWeight:(double)weight;
    24 - (double)weight;
    25 @end
    26 
    27 /********Animal的实现*******/
    28 @implementation Animal
    29 - (void)setAge:(int)age
    30 {
    31     _age = age;
    32 }
    33 - (int)age
    34 {
    35     return _age;
    36 }
    37 
    38 - (void)setWeight:(double)weight
    39 {
    40     _weight = weight;
    41 }
    42 - (double)weight
    43 {
    44     return _weight;
    45 }
    46 @end
    47 
    48 /********Dog*******/
    49 // : Animal 继承了Animal,相当于拥有了Animal里面的所有成员变量和方法
    50 // Animal称为Dog的父类
    51 // Dog称为Animal的子类
    52 @interface Dog : Animal
    53 @end
    54 
    55 @implementation Dog
    56 @end
    57 
    58 /********Cat*******/
    59 @interface Cat : Animal
    60 @end
    61 
    62 @implementation Cat
    63 @end
    64 
    65 int main()
    66 {
    67     Dog *d = [Dog new];
    68     
    69     [d setAge:10];
    70     
    71     NSLog(@"age=%d", [d age]);
    72     return 0;
    73 }

    2、继承的好处

    (1)抽取重复代码

    (2)建立了类与类之间的关系

    (3)子类可以拥有父类中的所有成员变量和方法

    (4)子类可以在不改变父类的基础上,拓充成员变量和方法

    3、注意点

    (1)基本上所有类的基类是NSObject。

    (2)父类必须写在子类前面。

    (3)不允许子类和父类拥有相同名称的成员变量。

    (4)子类方法和属性的访问过程:如果子类没有,就去父类中寻找。

    (5)父类被继承了并不影响父类的使用,还是能照常使用。

    4、缺点

      耦合性太强,类的关系太紧密。

    5、重写

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

    6、继承的专业术语

      父类/超类 superclass

      子类 subclass/subclsaaes

    7、继承的细节

      (1)单继承

      (2)子类和父类不能拥有相同的成员变量

      (3)方法的重写

     8、继承的使用场合

      (1)它的所有属性都是你想要得,一般就继承

      (3)它的部分属性是你想要的,可以抽取出另一个父类

    人生之路,不忘初心,勿忘始终!
  • 相关阅读:
    基于Networks of Brokers的HA方案
    淘宝开源任务调度框架tbschedule
    java.lang.ClassCastException: org.springframework.web.filter.CharacterEncodingFilter cannot be cast to javax.servlet.Filter
    spring boot1.3.0版本及以上版本profile指定参数无法被打入
    diffuse linux 文件比对工具
    PipedInputStream/PipedOutputStream原理
    应聘华为 16道经典面试题及回答思路
    MySql Host is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts' 解决方法
    查看linux下某端口被哪个进程占用(linux命令)
    Python3判断自身脚本是不是在运行
  • 原文地址:https://www.cnblogs.com/xdl745464047/p/3999166.html
Copyright © 2011-2022 走看看