首页 > 技术文章 > OC的基础语法(四)

iosnds 2015-10-16 10:35 原文

1.self的使用

/*
 
 self的使用总结
 
 1)self用在类方法中,指代的是当期类
                   只能调用的时类方法
 
 2)self用在对象方法中,指代的当前调用该方法的对象
                   只能调用对象方法
 
 
 口诀:  self指代的是方法的调用者
 
         Caculator   add 。。。。。  
 
                 self --> Caculator
 
         player      play
 
                 self --> player
 
         p1          play
 
                 self --> p1
 
         p2          play
 
                 self --> p2
 
 */

2.继承

    3、继承的好处
 
      1)子类可以继承自父类的属性和方法(非私有)
 
      2)子类可以使用父类的属性和方法了
 
    4、方法的重写
 
      前提:两个类必须有继承关系
      核心思想:子类定义了和父类同名、参数一致的方法
               在当前类中 子类的方法覆盖(重写)了父类的方法
 
      方法的调用顺序:
 
             子类的方法  --->  父类的方法  -->  NSObject--->报错

3.继承的注意事项

/*
 
 基类:
 
 
 1、继承过程中方法的访问:
 
    父类只能访问父类的方法
   
    子类可以访问子类的以及父类的方法
 
 2、重写:
 
    子类定义了一个和父类同名的方法,子类重写父类的方法
 
 
 3、继承的注意事项
 
    1)OC中的类的继承是单一继承的关系(一个类只能继承一个父类)
 
    2)子类不能定义和父类同名的变量
 
       子类可以定义和父类同名的方法(重写)
 
    3) OC支持 多层 继承
 
 
 */

4.代码

#import <Foundation/Foundation.h>

@interface Person : NSObject
{
    @public
    int _age;
}

-(void)show;
@end

@implementation Person

-(void)show
{

    NSLog(@"show");

}

@end


@interface Dog : Person

@end

@implementation Dog


@end

int main(int argc, const char * argv[]) {

    Dog *d = [[Dog alloc]init];
    
    [d show];
    
    d->_age = 10;
    
    NSLog(@"%d",d->_age);
    
    return 0;
}

5.OC中的变量修饰符

/*
 
  1、变量修饰符:成员变量修饰符
 
            设定一个成员变量可以访问的范围
  2、四个:
 
        @public   共有的,在任何地方都可以通过对象访问对象的成员变量
 
        @protected 受保护,只能在当前类和子类中去使用(系统默认的就是这种类型)
 
        @private   私有的,表示只有在当前类去使用
                          可以被子类继承,但是不能使用
 
        @package  (主要用在框架中),表示只能在框架中使用
 
  3、变量作用域修饰符作用的范围:
 
        从定义的位置开始,直到遇到了其他的类型修饰符,如果没有遇到其他的类型修饰符,直到 声明成员变量的 “}” 结束
 
 
 
   4、私有变量定义
 
      在.m中定义的变量就是一个私有变量,
      私有变量和把一个变量声明为私有的是有区别的
 
      把一个变量声明为私有的,可以被子类继承,但是不能使用
 
      私有变量,根本不会被子类继承。
 
 */

6.OC中的私有方法

//私有方法
//1)协议的时候,可以定义私有方法
//2) 在.m中定义的方法,而没有在.h中声明,这个方法就是一个私有方法
//3) 对本类的对象是隐藏的
//   私有方法只能在当前类的文件中使用,在子类中不能使用

7.多态

1)没有继承就没有多态
 
 (2)代码的体现:父类类型的指针指向子类对象
 
 (3)好处:如果函数方法参数中使用的是父类类型,则可以传入父类和子类对象,而不用再去定义多个函数来和相应的类进行匹配了。
 
 (4)局限性:父类类型的变量不能直接调用子类特有的方法,如果必须要调用,则必须强制转换为子类特有的方法。

8.类的本质

/*
 
  类的本质:也是一个类
 
  Person *p =[Person new];
 
  p是对象,是Person 类型
  p ----> Person 
 
 
  Person 是一个类对象,Class类型
 
 
  SEL是方法的选择器
 
     SEL 是一种类型,选择器类型
     //表示 把eat方法封装成 SEL类型得
     //SEL 类型就有 eat方法的地址
     SEL s1 = @select(eat);
 
 
 */

 

推荐阅读