码迷,mamicode.com
首页 > 其他好文 > 详细

OC的三大特性:封装、继承、多态

时间:2015-04-11 22:27:52      阅读:128      评论:0      收藏:0      [点我收藏+]

标签:

  • 封装:目前我的理解是将类声明里的实例变量“包裹”好,一旦“包裹”好,由类生成的对象也就“包裹”的“严实”了,这样外部的东西就不会随意修改对象的重要数据了,之前我们要想对类的实例变量赋值,是通过指针访问的,并且要在实例变量前面加上关键字@public,其实这个@public关键字像是把类里面的实例变量“赤裸裸”的暴露在外面,很不安全。那么不通过这种途径要想访问对象的数据咋办呢?set方法(setter)和get方法(getter)很好的解决了这一问题。

         set方法:

  1.  它是对象方法,肯定是用减号‘-‘开头,方法名必须以set开头,紧跟着是实例变量名,并且首字母要大写
  2. 没有返回值,并且有参数,参数的类型跟对应的实例变量类型一致
  3. 能过滤掉一些不合理的赋值

        get方法:

  1. 也是对象方法,必须用减号‘-‘开头,方法名不能以get开头,方法名和实例变量名一致(为了区分到底是方法名还是实例变量,以后所有实例变量都是以下划线‘_’开头)
  2. 有返回值,返回值类型与实例变量的类型一致,没有参数
 1 #import <Foundation/Foundation.h>
 2 
 3 @interface Person : NSObject
 4 {
 5     int _age; //年龄
 6     double _weight; // 体重
 7 }
 8 
 9 //年龄的setter和getter声明
10 - (void)setAge:(int)age;
11 - (int)age;
12 
13 @end
14 
15 @implementation Person
16 
17 //年龄的setter和getter实现
18 - (void)setAge:(int)age{
19     if (age <= 0) {
20         _age = 1;
21     }else{
22         _age = age;
23     }
24 }
25 
26 - (int)age{
27     return _age;
28 }
29 
30 @end
31 
32 //测试age的setter和getter
33 int main(){
34     Person *p = [Person new];
35     [p setAge:-3];
36     NSLog(@"年龄为%d", [p age]);
37     return 0;
38 }
  • 继承:继承是OC语法最重要的一个特性,他是类之间的一种关系,如果说B类继承了A类,那么A类的所有实例变量和方法B类都会拥有而不需要重复说明省去了不必要的重复代码,上面的B类叫父类,A类成为子类,它的写法就是:“: 类名”。OC中基本所有的类都是继承NSObject类的,称NSObject为root Class(根类)
     1 #import <Foundation/Foundation.h>
     2 /************Person类************/
     3 @interface Person : NSObject
     4 {
     5     int _age; //年龄
     6     double _weight; // 体重
     7 }
     8 
     9 //年龄的setter和getter声明
    10 - (void)setAge:(int)age;
    11 - (int)age;
    12 
    13 @end
    14 
    15 @implementation Person
    16 
    17 //年龄的setter和getter实现
    18 - (void)setAge:(int)age{
    19     if (age <= 0) {
    20         _age = 1;
    21     }else{
    22         _age = age;
    23     }
    24 }
    25 
    26 - (int)age{
    27     return _age;
    28 }
    29 
    30 @end
    31 
    32 /**************Studengt类***************/
    33 @interface Studengt : Person
    34 
    35 @end
    36 
    37 @implementation Studengt
    38 
    39 @end
    40 
    41 //测试Student类
    42 int main(){
    43     Studengt *stu = [Studengt new];
    44     [stu setAge:17];
    45     NSLog(@"学生的年龄是%d", [stu age]);
    46     
    47     return 0;
    48 }

    因为Studengt类继承了Person类,所以虽然子类没有明确说明实例变量和方法,但是学生依然有年龄_age的实例变量以及_age的getter和setter

        但是继承有很多需要注意的地方:

  1. 如果父类和子类在同一个文件中,父类的声明和实现必须要在子类的前面,
  2. 子类拥有的新实例变量必须保证不能和父类的实例变量相同否则会报错:

    duplicate member

  3.  

 

OC的三大特性:封装、继承、多态

标签:

原文地址:http://www.cnblogs.com/oucding/p/4418375.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!