A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© vyqrvwgf 中级黑马   /  2015-11-3 21:13  /  790 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1.基类和派生类之间的关系
        1)基类的私有属性能被继承但是不能被使用
        2)oc中的继承是单继承,每一个子类只能继承一个父类
        3)继承需要贯彻合理性

2.方法的重写
        从父类继承的方法,可能不适用于子类,可以重写方法
       
  1. #import <Foundation/Foundation.h>
  2. @interface Animal:NSObject
  3. -(void)run;
  4. @end
  5. @implementation Animal

  6. -(void)run{
  7.     NSLog(@"动物在跑");
  8. }

  9. @end

  10. @interface Dog : Animal

  11. @end
  12. @implementation Dog
  13. //父类中动物在跑不适合Dog,重写run方法
  14. -(void)run{
  15.     NSLog(@"狗在跑");
  16. }

  17. @end

  18. int main(){
  19.     Animal *a=[Animal new];
  20.     Dog *d=[Dog new];
  21.     [a run];
  22.     [d run];
  23.     return 0;
  24. }
复制代码

3.实例变量修饰符
        1)@public
        任意程序集
        2)@protected
        同一类和派生类(默认)
        3)private
        同一类

4.oc中的私有变量和私有方法
        1)私有变量
        在.m中也可以声明成员变量,因为其他文件都只会导入头文件,所以在.m中声明成员变量是私有的,等同于private
       
  1. #import<Foundation/Foundation.h>
  2. Person.h
  3. @interface Person:NSObject
  4. {
  5.         int _age;
  6. }
  7. -(void)run;
  8. @end
  9. Person.m
  10. //只能在Person.m中使用
  11. int m=10;
  12. @implementaion Person
  13. -(void)run{
  14.         NSLog(@"正在跑,速度是%d",m);
  15. }
  16. @end
  17. main.m
  18. int main(){
  19.         Person *p=[Person new];
  20.         [p run];
  21. return 0;
  22. }
复制代码

        2)私有方法
        在.h中没有生命,在.m中实现,该方法被称为私有方法,不能被子类继承,也不能背访问,可以在意境声明的方法中使用self方法访问private变量。

5.description方法重写
        Person *p=[Person new];
        NSLog(@"%@",p);
        此时会打印p的地址
        重写description方法
       
  1. Person.h
  2. #import <Foundation/Foundation.h>

  3. @interface Person : NSObject
  4. {
  5.     int _age;
  6. }
  7. -(void)setAge:(int)age;
  8. -(int)age;
  9. @end


  10. Person.m
  11. #import "Person.h"

  12. @implementation Person
  13. -(void)setAge:(int)age{
  14.     _age=age;
  15. }
  16. -(int)age{
  17.     return _age;
  18. }
  19. -(instancetype)init{
  20.     self=[super init];
  21.     if(self){
  22.         _age=25;
  23.     }
  24.     return self;
  25. }
  26. //重写description方法,当用%@打印对象时,返回p的属性。
  27. -(NSString *)description{
  28.     return [NSString stringWithFormat:@"age=%d",self.age];
  29. }
  30. @end


  31. main.m
  32. #import <Foundation/Foundation.h>


  33. #import "Person.h"
  34. #import <Foundation/Foundation.h>
  35. #import "Person.h"
  36. int main(int argc, const char * argv[]) {
  37.     @autoreleasepool {
  38.         Person *p=[Person new];
  39.         NSLog(@"%@",p);
  40.     }
  41.     return 0;
  42. }
复制代码

1 个回复

倒序浏览
收益匪浅,加油!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马