面向对象的三大特性

oc中面向对象有三大特性,为封装,继承,多态。   封装也是成员变量的封装(保护成员变量不能被外界随便赋值。)

1: 封装

1>:set 方法:给外界提供一个方法给外界设置成员变量的值。

                  方法名必须以set 开头。

                  set 后面跟上成员变量名,且成员变量名首字母必须大写。

                  set 方法返回值类型必为void。

                  一定要接收一个参数,且参数类型跟成员变量类型一致。

                 形参的名称不能与成员变量名一样。

在 set 方法实现中可以对参数进行过滤。成员便令不能用@public 时,成员变量可被外面的指针变量任意赋值。

set 方法可以监听成员变量的改变。

2>:  get 方法:  返回对象内部的成员的变量

                             肯定有返回值,且返回值类型与成员变量类型一致。

                             不需要有形参。

                             方法名就是成员变量名。

封装有set 方法来设置成员变量,用 get 方法来访问成员变量。把对象的成员变量隐藏在里面,不显示细节。保证数据的安全性。

只读:  只允许外界访问对象的某个属性,不允许外界修改这个成员变量的值。这时可以只提供get 方法不提供set 方法。

成员变量的命名,必须要以下划线开头,这样可以跟局部变量区分开来,还跟get 方法区分开。带下划线的一般都是成员变量。

oc是弱语法,oc中的方法调用时动态检测的,运行时的过程中才会检测对象有没有实现相应的方法。

例如:

@interface  Person  : NSObject 

 @end 

@implementation   Person 

     @end 

int  main ()

{

    Person  * s =   [ person  new ];

 [s  test ];

  return 0;

     }

 这个程序中类的声明中什么也没有。类的实现也是空的。可是编译时只有一个警告,如果加上test 方法的声明,则编译无错误。链接时也可以通过,可是运行时会出现系统崩溃。因为找不到test 方法。  如果没有 test 方法的声明,但是有类的实现也是可以的,但是此时,类的实现必须在 main  函数之前。但是这样不规范、

封装的好处:把一个功能封装到一个方法中去。

                        过滤不合理的值。

                         让外界不必关注内部的细节。

类方法:可以直接用类名调用的方法。类本身会在内存中占据存贮空间,里面有方法的列表。

类方法以加号开头,只能让类调用,类方法可以与对象方法同名。在类方法中不能直接调用成员变量,。

例如: 

 + void  run 

{

  NSLog (@''  跑起来了");

}

  类方法的好处:

   不依赖于对象,执行效率高。

  能用类方法尽量类方法。

  当方法内部不需要使用到成员变量时,就可以改为类方法。

  工具类:基本没有成员变量,里面的方法基本都是类方法。

 易错:

+ void  run 

{  

 [  person  run  ];

  NSLog (@''  跑起来了");

}

    运行时什么也不输出,类方法自己调用自己,死循环。

+ void  run 

{  

NSLog (@''  跑起来了");

 [  person  run  ];

 }

运行中先输出,在自己调用自己,也是死循环。

  self  关键字

当成员变量与局部变量同名时,采取就近原则。访问的事局部变量。用self 访问成员变量可以区分同名的局部变量。

self 只能出现在oc方法中,不能在函数中使用。

self -> 成员变量名: 访问当前对象内部的成员变量。

[ self  方法名];

//   谁调用了当前方法 ,self 就代表谁,类方法中就代表类,对象方法中就代表方法。

- void  run 

{  

NSLog (@''  跑起来了");

 [  self   run  ];

 } 

死循环自己调用自己.

2:继承

继承是类和类之间的关系

例如:

 @interface  Person  : NSObject 

            {

              int  age ;

              double  weight;

           }


         - void  test ;

            @end 

@implementation   Person 

- void  test 

NSLog (@''  调用 了人的 test 函数");

}

     @end 

@interface   student  : Person 


            @end 

@implementation   Person 

- void  test 

NSLog (@''  调用 了学生的 test 函数");

}

     @end 

继承的好处:student  继承了person 的类,student 成为子类,person 成为父类。

 注意: 父类应写在子类之前,因为编辑器是从上往下编译的,所以父类先定义,子类才能使用。

              oc中不允许父类和子类中有相同的成员变量。

             子类中允许子类跟父类中有相同的实现方法、

           如果在子类中调用某个方法,会优先在子类中找有没有这个方法的实现。找不到的话就去父类中找。每个类中都有一个super 指针,指向它的父类。 也可以在父类中声明某个方法,但不在父类中实现。在子类中实现。然后在子类中调用。但是编译时会有警告。

        子类重现实现父类中的某个方法,会覆盖父类的方法,优先使用子类的。

  注意:

1: 父类必须声明在子类之前,实现可在子类后面。

2:调用某个对象的方法时,会优先去当前对象对应的类中找,如果找不到就顺着super 指针去父类中找。

   继承的好处: 抽取了重复代码,建立了类之间的关系。

               缺点: 类之间的耦合性太强。

 使用场合:

1: 当两个类拥有相同的属性和方法时,就可以将相同的东西放在一个父类中。

2:当A类拥有B类的部分属性和方法时,可以考虑让B类继承A类。

使用注意:

     @interface Score: NSObject

            {

              int  -cscore ;

               int  -ocscore;

           }


         - void  test ;

            @end 

@implementation   Score

- void  test 

NSLog (@''  调用 了test 函数");

}

     @end 

@interface Student: NSObject

            {

              int  -cscore ;

               int  -ocscore;

           }


         - void  test ;

            @end 

@implementation   Student

- void  test 

NSLog (@''  调用 了人的 test 函数");

}

     @end 

虽然这两个类具有相同的属性,可是不能用student 继承score ,因为逻辑上不对。

3:多态

没有继承就没有多态,多态是指父类指针指向子类对象。

多态的好处:如果参数中使用的事父类类型,可以传入子类,父类的对象。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,185评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,652评论 3 393
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,524评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,339评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,387评论 6 391
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,287评论 1 301
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,130评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,985评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,420评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,617评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,779评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,477评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,088评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,716评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,857评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,876评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,700评论 2 354

推荐阅读更多精彩内容