Java中应该是没有提供相关的机制,但是Java可以通过动态代理来实现AOP,在切入点前后执行代码逻辑,个人认为比OC还要方便。
// // Girl.h // 10_Category // // Created by apple on 14/12/23. // Copyright (c) 2014年 cc. All rights reserved. // #import <Foundation/Foundation.h> @interface Girl : NSObject //显示MM的中文名 - (NSString*)showEnglishName; @end // // Girl.m // 10_Category // // Created by apple on 14/12/23. // Copyright (c) 2014年 cc. All rights reserved. // #import "Girl.h" @implementation Girl - (NSString*)showEnglishName { return @"mm"; } @end // // Girl+GirlCategory.h // 10_Category // // Created by apple on 14/12/23. // Copyright (c) 2014年 cc. All rights reserved. // #import "Girl.h" //OC分类的头文件 //命名规范 基类+分类名.h/.m //格式 @interface 基类 (分类) //分类的作用:在不修改基类源文件的基础上,为基类动态的扩展方法 //通过分类Category可以在不修改OC或者IOS框架的源码基础上为这些类增加一些扩展方法 //分类并非子类继承的方式,而是直接对基类进行扩展 @interface Girl (GirlCategory) //给Girl类增加一个显示中文名字的方法 - (NSString*)showChineseName; @end // // Girl+GirlCategory.m // 10_Category // // Created by apple on 14/12/23. // Copyright (c) 2014年 cc. All rights reserved. // #import "Girl+GirlCategory.h" @implementation Girl (GirlCategory) - (NSString*)showChineseName { return @"美眉"; } @end // // main.m // 10_Category // // Created by apple on 14/12/23. // Copyright (c) 2014年 cc. All rights reserved. // #import <Foundation/Foundation.h> #include "Girl.h" #include "Girl+GirlCategory.h" int main(int argc, const char * argv[]) { @autoreleasepool { Girl* pGirl = [[Girl alloc] init]; //Girl基类中定义的方法 NSLog(pGirl.showEnglishName); //GirlCategory分类中扩展的方法 NSLog(pGirl.showChineseName); } return 0; }
原文地址:http://blog.csdn.net/oktears/article/details/42105165