[关闭]
@fiy-fish 2015-07-18T21:10:40.000000Z 字数 2346 阅读 1199

day07-03-类别

Objective-c


  1. // main.m
  2. // day07-03-类别
  3. //
  4. // Created by Aaron on 15/7/9.
  5. // Copyright (c) 2015年 Aaron. All rights reserved.
  6. //
  7. #import <Foundation/Foundation.h>
  8. //继承
  9. //大量创建相似的类
  10. //统一接口
  11. //继承官方或者第三方的类
  12. //继承扩展类-----实际上产生了一个新的类
  13. //类别
  14. //主要作用:扩展一个类 -----实际上是给原来的类增加一些东西
  15. //副作用: 将方法进行分类管理
  16. //分工合作
  17. /*
  18. @interface 原类名 (类别名)
  19. @end
  20. @implementation 原类名 (类别名)
  21. @end
  22. */
  23. // 扩建了 NSString 类 添加一个让字符串逆序的方法
  24. @interface NSString (Reverse)
  25. //{
  26. // NSInteger _age;
  27. //}
  28. +(void)showString:(NSString *)string;
  29. -(NSString *)reverseString;
  30. @end
  31. @implementation NSString (Reverse)
  32. -(NSString *)reverseString
  33. {
  34. NSString *str = @"";
  35. for(NSInteger i = self.length-1; i >= 0; i--)
  36. {
  37. unichar c = [self characterAtIndex:i];
  38. //不可变字符串也可以添加字符
  39. str = [NSString stringWithFormat:@"%@%C",str,c];
  40. }
  41. return str;
  42. }
  43. +(void)showString:(NSString *)string
  44. {
  45. NSLog(@"%@",string);
  46. }
  47. @end
  48. //1.类别里面可以扩展方法
  49. //2.可以扩展实例方法和类方法
  50. //3.在类别里,不能添加属性
  51. //4.要使用类别中的方法,需要包含类别的头文件
  52. //5.在类别中可以使用原类的属性
  53. //6.但是在.m里定义的私有属性是不能在类别中直接访问的
  54. //7.在类别里面可以访问原类的方法
  55. //8.要访问原类的属性或者方法都必须是在原类的interface里提供了接口才能访问
  56. //9.类别里面可以实现一些私有的方法
  57. //10.类别里方法的优先级比较高, 子类类别>子类>父类类别>父类
  58. //11.类别里重写原类的方法,可以不声明接口
  59. //12.父类类别的方法,子类依然适用,但是要包含头文件
  60. #import "Person.h"
  61. #import "Person+Eat.h"
  62. #import "Student.h"
  63. int main(int argc, const char * argv[]) {
  64. @autoreleasepool {
  65. NSLog(@"%@",[@"hello" reverseString]);
  66. [NSString showString:@"world"];
  67. Person *p = [[Person alloc] init];
  68. [p singSongs];
  69. Student *std = [[Student alloc] init];
  70. //[std playLOL];
  71. [p eatFan];
  72. NSLog(@"-------------");
  73. [std eatFan];
  74. [std singSongs];
  75. }
  76. return 0;
  77. }

  1. #import "Person.h"
  2. @interface Student : Person
  3. @end

  1. #import "Student.h"
  2. @implementation Student
  3. @end

  1. #import "Person.h"
  2. @interface Person (Eat)
  3. -(void)eatFan;
  4. //-(void)playLOL;
  5. @end

  1. #import "Person+Eat.h"
  2. @implementation Person (Eat)
  3. -(void)eatFan
  4. {
  5. [self singSongs];
  6. NSLog(@"%@要吃饭",
  7. _name);
  8. //_age = 100;
  9. //[self playLOL];
  10. [self naKuaiZi];
  11. }
  12. -(void)naKuaiZi
  13. {
  14. NSLog(@"拿筷子");
  15. NSLog(@"%@",_name);
  16. }
  17. -(void)singSongs
  18. {
  19. NSLog(@"person+Eat 唱:-海阔天空");
  20. }
  21. @end

  1. #import <Foundation/Foundation.h>
  2. @interface Person : NSObject
  3. {
  4. NSString *_name;
  5. }
  6. -(void)singSongs;
  7. //-(void)playLOL;
  8. @end
  9. @interface Person (Play)
  10. @end

  1. #import "Person.h"
  2. //匿名类别
  3. //专门用来声明内部接口
  4. //匿名类中可以添加属性
  5. @interface Person ()
  6. @property (nonatomic,assign)NSInteger age;
  7. @end
  8. @implementation Person
  9. //添加属性
  10. //{
  11. // NSInteger _age;
  12. //}
  13. -(instancetype)init
  14. {
  15. if(self = [super init])
  16. {
  17. _name = @"小新";
  18. }
  19. return self;
  20. }
  21. -(void)singSongs
  22. {
  23. [self playLOL];
  24. self.age = 1000;
  25. NSLog(@"person 唱:我是一只小小小鸟");
  26. }
  27. -(void)playLOL
  28. {
  29. NSLog(@"打撸啊撸");
  30. // [self singSongs];
  31. // NSLog(@"%ld",self.age);
  32. }
  33. @end
  34. @implementation Person (Play)
  35. -(void)playLOL
  36. {
  37. NSLog(@"Person (Play)打你妹啊,就知道撸");
  38. }
  39. @end

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注