黑马程序员_关于分类的总结

本文详细介绍了在不改变原有类模型的前提下,如何通过分类(Category)来扩展类的功能,并讨论了其在大型项目开发中的优势。包括如何给系统自带类添加分类方法,以及分类在方法实现、访问实例变量等方面的使用技巧。同时,通过代码示例展示了如何在Objective-C中实现这一过程,以及多个分类间的优先级和方法覆盖问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 基本用途

如何在不改变原来类模型的前提下,给类扩充一些方法?有2种方式

  • 继承
  • 分类(Category)

2.格式
分类的声明
@interface 类名 (分类名称)
// 方法声明
@end
分类的实现
@implementation 类名 (分类名称)
// 方法实现
@end
3.好处

  • 一个庞大的类可以分模块开发
  • 一个庞大的类可以由多个人来编写,更有利于团队合作

4.给系统自带的类添加分类

  • 给NSString增加一个类方法:计算某个字符串中阿拉伯数字的个数
  • 给NSString增加一个对象方法:计算当前字符串中阿拉伯数字的个数

5.注意

  • Category可以访问原始类的实例变量,但不能添加变量,只能添加方法。如果想添加变量,可以考虑通过继承创建子类
  • Category可以实现原始类的方法,但不推荐这么做,因为它是直接替换掉原来的方法,这么做的后果是再也不能访问原来的方法
  • 多个Category中如果实现了相同的方法,只有最后一个参与编译的才会有效
    代码示例:
#import <Foundation/Foundation.h>
#import "Person.h"
#import "Person+MJ.h"
#import "Person+JJ.h"

int main()
{
    Person *p = [[Person alloc] init];
    //p.age = 10;

    // 优先去分类中查找,然后再去原来类中找,最后再去父类中找
    [p test];
   // [p study];

    return 0;
}
#import "Person.h"

@implementation Person
- (void)test
{
    NSLog(@"Person-test");
}
@end
#import "Person+JJ.h"

@implementation Person (JJ)
- (void)test2
{
    NSLog(@"-----test2");
}

- (void)test
{
    NSLog(@"Person (JJ)-test");
}
@end
#import "Person+MJ.h"

@implementation Person (MJ)
- (void)study
{
    NSLog(@"学习-----%d", _age);
}

- (void)test
{
    NSLog(@"Person (MJ)-test");
}
@end
### 黑马程序员 JavaSE 课程概述 #### 什么是Java? Java是一种广泛使用的面向对象编程语言,具有跨平台特性。它由Sun Microsystems于1995年推出,并迅速成为企业级应用开发的主要技术之一[^1]。 #### 马程序员 JavaSE 基础教程的核心内容 黑马程序员的JavaSE基础教程通常分为多个阶段,逐步深入讲解Java的基础知识和高级特性。以下是该课程的一些核心模块: 1. **Java入门** - 讲解Java的历史背景和发展历程。 - 探讨Java的特点及其与其他编程语言的区别。 2. **集成开发环境(IDEA)** - 学习如何安装并配置IntelliJ IDEA或其他主流IDE。 - 使用IDE创建、运行和调试简单的Java程序。 3. **基础语法** - 数据类型与变量声明。 - 运算符及表达式的使用方法。 - 控制结构如条件语句(if, switch)以及循环(for, while)。 4. **面向对象编程(OOP)** - 类与对象的概念介绍。 - 封装、继承和多态三大特性的实现方式。 - 抽象类与接口的应用场景分析。 5. **异常处理机制** - 异常的基本概念及其分类。 - try-catch-finally块的作用范围说明。 - 自定义异常的设计原则。 6. **集合框架(Collection Framework)** - List、Set、Map等常用集合类型的比较选择依据。 - Iterator迭代器模式的工作原理详解。 - 并发环境下安全操作集合的方法探讨。 7. **输入输出流(I/O Streams)** - 文件读写基本流程演示。 - 字节流与字符流之间的区别联系解释。 - 缓冲区(Buffered Stream)提高效率的技术手段分享。 8. **多线程(Thread)** - 创建启动新线程的不同途径展示。 - 同步锁(Synchronized Block/Method)防止资源竞争现象发生的重要性强调。 - 线程间通信工具(Condition Variable,Pipe etc.)实际案例剖析。 9. **网络编程(Network Programming)** - Socket套接字基础知识普及。 - 客户端服务器模型(Client-Server Model)构建过程指导。 - HTTP协议请求响应消息格式解析。 10. **数据库连接(JDBC)** - JDBC API主要组成部分功能描述。 - PreparedStatement预编译SQL语句提升性能优势阐述。 - ResultSet结果集遍历技巧总结。 ```java public class HelloWorld { public static void main(String[] args){ System.out.println("欢迎来到黑马程序员Java世界!"); } } ``` 以上仅为部分精选主题概览,具体学习路径还需参照官方文档或者购买正版教材获取更详尽的内容安排。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值