黑马程序员-----------Objective-c基础-----------继承和多态

本文详细介绍了Objective-C编程中self和super关键字的使用,包括它们在类方法和对象方法中的应用,访问器和设置器的功能,以及如何在继承体系中调用父类方法。此外,还探讨了实例变量的修饰符、私有变量的概念、description方法的重写、多态的原理和条件,以及类的本质和类对象的存储细节。
摘要由CSDN通过智能技术生成
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
一:self和super关键字介绍
1.OC提供了两个保留字self和super,用于在方法定义中引用执行该方法的对象。
OC中的self,就相当于C++和java中的this指针

2.设置器和访问器,提供外界操作内部类属性的一个通道

3.super调用父类的方法,可以重写一个已有的方法来修改或将它添加到现有的方法中,仍然可以将原来的方法纳入到修改后的方法中。

4.self应用场景
1)用在类方法中
2)用在对象方法中
3)访问成员变量
4)self在OC的内存管理特殊使用。(就业班的课)

     5.self用在对象方法中
self在对象方法中使用其指向的是调用当前实例方法 的对象。

     6.self用在类方法中
self用在类方法中使用其指向的是调用当前类方法的 当前类。

7.有一个Person类
Person *p = [Person new];
NSLog(@"\n Person = %p",[p class]);   //[p class] 返回的是类Person的地址,也就是类对象。


8.self修饰变量
当一个对象方法的形参名和实例变量名相同时,形参将屏蔽实例变量,该对象方法类的该变量都将变成局部变量,要想在这种情况下访问实例变量, 可通过self->实例变量名来实现。

9.self使用总结
self谁调用当前方法,self就代表谁
[self 方法名称];  //调用其他方法(类方法/对象方法)

二:类的继承和派生
面向对象四大特性:封装,继承,多态,抽象
封装:  1)保护数据安全
2)隐藏复杂底层内容
3)隔离底层变化

继承:
注意事项:
1)子类不能定义和父类同名的变量
2)OC支持单一继承,不支持多继承
3)OC支持多层继承

继承体系中方法调用的顺序
1)在自己类中找
2)如果没有,去父类中找
3)如果父类中没有,就去父类的父类中
4)可以一直往上找,一直到基类(NSObject)


三:实例变量修饰符的介绍
1.实例变量的作用域
访问修饰符:public (任意程序集)
   protected(同一类和派生类)
   private(同一个类)
(1)@public(公开的)在有对象的前提下,任何地方都可以直接访问。
(2)@protected(受保护的)只能在当前类和子类的对象中访问。
(3)@private(私有的)只能在当前类的对象中才能直接访问。
(4)@package(框架级别的)作用域介于私有和公开之间,只要处于同一个框架中就可以直接通过变量名访问。


四:实例变量修饰符对子类的影响
1.@public和@protected可以被子类继承和访问

面试题:
@private 类型的变量,能否被子类继承
答:子类可以继承父类所有的实例变量和方法
@private 类型的变量,能否被子类访问
答:不能访问

2.实例变量作用域使用注意事项
1)在@interface @end之间声明的成员变量如果不做特别声明,那么默认是protected的
2)一个类继承了另一个类,那么就拥有了父类的所有成员变量和方法,注意所有的成员变量它都拥有,只是有的它不能直接访问。


五:OC中的私有变量
1.OC中的私有变量
1)在.m文件中定义的实例变量,是纯私有的变量,该变量只能在当前类中使用,不能被子类继承和访问。
       2.OC中的私有方法
在.h文件中没有被声明,在.m文件中实现,此时该方法称为私有方法,不能被子类继承和访问。
*只能通过self在本类中访问私有方法


六:description方法介绍及重写
1.description方法概述
假如有一个类Person ,生成一个对象d
则:NSLog(@"\n d = %p",d);   //打印的是对象的地址
   NSLog(@"\n d= %@",d);    //打印的是 类名: 对象的地址
当我们以%@打印对象时,实际上是调用了对象的description方法。

2.description重写的方法

-(NSString *)description{

return @"重写了description方法!";
}

或者:
-(NSString *)description{
NSString *str  = [NSString stringWithFOrmat:@"年龄:%d,颜色:%d",_age,_color];
return str;
}
3.description陷阱
*重写description类方法时不能访问实例变量。
可以以%@形式打印类信息
NSLog(@"\n %@",[d class]);
千万不要在description方法中同时使用%@和self,会造成死循环
return [NSString stringWithFormat:@"%@",self];


七:多态的概念和条件
1.概念:不同对象对自己的方式响应相同名称方法的能力称为多态。

2.重点:多态的条件:
有继承关系,有方法重写
父类声明变量指向子类对象。


3.多态的优点:



4.多态的注意事项
1)Animal *an6 = [Dog new];   // Dog类里有eat方法,Animal类没有eat方法
// [an6 eat];  //报错
[(Dog *)an6 eat];  //正确
2)Animal *an6 = [Animal new];   // Dog类里有eat方法,Animal类没有eat方法
// [an6 eat];  //报错
[(Dog *)an6 eat];  //编译可以通过,骗过编译器,但执行会错误。

5.多态的实现
假如有:父类Animal ,子类:Cat和 Dog,三个类都有run方法
Animal *a2 = [Dog new];
[a2 run];  //实质上调用的是狗的run方法


6.多态的原理
动态绑定:



八:类的本质
1.类类型的变量(实例对象)
Person *p = [Person new];   //实例化对象做了三件事情:1)申请空间 2)初始化成员变量  3)返回空间首地址
//对象isa指向类对象(代码区地址)
p就是类类型的指针变量,指向实例对象
Person也一个对象(类对象),是Class类型的对象

2.类的本质其实也是一个对象(类对象)
定义:


3.类对象如何获取
1)通过实例对象获取
Dog *dog = [Dog new];
Dog *d2 = [Dog new];
//第一种方法获取类对象
Class c = [dog class];
Class c2 = [d2 class];
2)通过类名获取(类名其实就是类对象)
Class c3 = [Dog class];

九:类对象的使用
Person *p = [Person new];
Class c1 = [p class];   //c1---->Person

1)创建实例对象
Person *p1 = [c1 new];
2)调用类方法
[c1 test];


十:理解SEL类型
1.SEL:全称selector表示方法的存储位置。

2.Person *p = [Person new];
  [p test];
寻找方法test的过程:
1)首先把test这个方法名包装成sel类型的数据;
2)根据SEL数据找到对应的方法的地址;
3)根据方法的地址调用相应的方法。
4)注意:在这个操作过程中有缓存,第一次的时候是一个一个的找,非常耗性能,之后再用到的时候就直接使用。

关于_cmd:每个方法的内部都有一个_cmd,代表当前方法。


SEL s1 = @selector(test);   //手动把test方法包装成SEL类型
[p performSelector:s1];     //响应方法,向对象p发送一个s1消息,从而调用test方法。 


十一:类对象的存储细节
1.类对象的存储细节:





【基于Python的大麦网自动抢票工具的设计与实现】 随着互联网技术的发展,网络购票已经成为人们生活中不可或缺的一部分。尤其是在文化娱乐领域,如音乐会、演唱会、戏剧等活动中,热门演出的门票往往在开售后瞬间就被抢购一空。为了解决这个问题,本论文探讨了一种基于Python的自动抢票工具的设计与实现,旨在提高购票的成功率,减轻用户手动抢票的压力。 Python作为一种高级编程语言,因其简洁明了的语法和丰富的第三方库,成为了开发自动化工具的理想选择。Python的特性使得开发过程高效且易于维护。本论文深入介绍了Python语言的基础知识,包括数据类型、控制结构、函数以及模块化编程思想,这些都是构建抢票工具的基础。 自动化工具在现代社会中广泛应用,尤其在网络爬虫、自动化测试等领域。在抢票工具的设计中,主要利用了自动化工具的模拟用户行为、数据解析和定时任务等功能。本论文详细阐述了如何使用Python中的Selenium库来模拟浏览器操作,通过识别网页元素、触发事件,实现对大麦网购票流程的自动化控制。同时,还讨论了BeautifulSoup和requests库在抓取和解析网页数据中的应用。 大麦网作为国内知名的票务平台,其网站结构和购票流程对于抢票工具的实现至关重要。论文中介绍了大麦网的基本情况,包括其业务模式、用户界面特点以及购票流程,为工具的设计提供了实际背景。 在系统需求分析部分,功能需求主要集中在自动登录、监控余票、自动下单和异常处理等方面。抢票工具需要能够自动填充用户信息,实时监控目标演出的票务状态,并在有票时立即下单。此外,为了应对可能出现的网络延迟或服务器错误,工具还需要具备一定的错误恢复能力。性能需求则关注工具的响应速度和稳定性,要求在大量用户同时使用时仍能保持高效运行。 在系统设计阶段,论文详细描述了整体架构,包括前端用户界面、后端逻辑处理以及与大麦网交互的部分。在实现过程中,采用了多线程技术以提高并发性,确保在抢票关键环节的快速响应。此外,还引入了异常处理机制,以应对网络故障或程序错误。 测试与优化是确保抢票工具质量的关键步骤。论文中提到了不同场景下的测试策略,如压力测试、功能测试和性能测试,以验证工具的有效性和稳定性。同时,通过对抢票算法的不断优化,提高工具的成功率。 论文讨论了该工具可能带来的社会影响,包括对消费者体验的改善、对黄牛现象的抑制以及可能引发的公平性问题。此外,还提出了未来的研究方向,如增加多平台支持、优化抢票策略以及考虑云服务的集成,以进一步提升抢票工具的实用性。 本论文全面介绍了基于Python的大麦网自动抢票工具的设计与实现,从理论到实践,从需求分析到系统优化,为读者提供了一个完整的开发案例,对于学习Python编程、自动化工具设计以及理解网络购票市场的运作具有重要的参考价值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值