黑马程序员-[OC]学习之旅-封装、继承

本文深入探讨了面向对象编程中的类方法概念,包括类方法与实例方法的区别、类方法的使用注意事项、匿名对象的应用、封装原则、setter与getter方法、对象之间的组合、依赖与关联关系、重载机制、static关键字的运用、self与super关键字的功能以及继承的基本规则。文章还详细解释了实例变量的修饰符、私有变量的特性、description方法的重写以及如何在不同情况下正确使用这些概念。

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

类方法的概述:

+表示类方法,就是类调用方法,不依赖任何对象的方法

-表示对象方法,只能对象调用,依赖于任何对象的方法

类的使用注意事项:

类方法可以和实例方法同名,实例方法有实例对象访问调用,类方法要通过类里访问调用。

类方法也可以是从父类继承而来,子类可以重写类方法,

类方法和实例方法一样在interface 里声明,在implementation里实现

类方法只能被类调用执行,向实例对象发送类方法是不能被触发执行的

在类方法里使用了self,self执行的类对象是class object 而不是实例对象instance object

类方法中易犯的错误

在类方法中使用了类成员变量


匿名对象

[Person  new]

调用方法:[Persn new] run];

优点:可以简化代码,方便方法调用

缺点:匿名对象实例化以后,只能正确的使用成员变量

Person  *p = [[Person alloc] init];

Person  *P1 =[Person new];

alloc 和init分别把分配内存和初始化的工作分开,先分配内存,然后调用类的构造函数


封装:

本质是:把数据隐藏起来,只能用此类的方法函数才可以访问或者设置数据,降低数据的无用的可能型

原理:

实例变量默认只能被当前类的对象方法访问

步骤:定义设置实例变量(setter)方法和访问实例变量(getter)方法


setter设置器

set方法的作用:提供外接一个设置成员变量值的方法

命名规范:

方法名以set开头

是对象方法,只能由对象调用

返回值一定是void

一定要接收一个参数,而且参数类型需要和成员变量的类型一致

形参名不能和成员变量名一样

set方法的好处:不让数据暴露在外,保证数据的安全性

对设置的数据进行过滤

-(void)setAge:(int)age;声明

-(void)   setAge:(int)age{ 实现

_age  = age;

}


getter方法(访问器)

get 的作用:为调用者返回对象内部的成员变量

命名规范:一定有返回值,返回值的类型和成员变量的类型一致

方法名和成员变量名一样

不需要接收任何参数

-(int)  age;声明

-(int)age{

return_age;

}


对象和对象的关系:

组合模式:

把具有相同基类类型的对象组合到树形结构中,表示部分-整体的层次结构

依赖关系:

A对象作为B对象的局部变量或是方法形参,

[p  feedDog:dog];

关联关系:当一个对象拥有另一个对象的时候

当B对象为A对象的成员变量的时候,B对象与A对象之间存在一种关联关系

其耦合度高于依赖关系



重载:OC中 没有严格的方法的重载

OC中的重载是参数个数不同,但返回类型后面的名字相同。或者是参数的个数相同,但是其标签不相同

-(void)test:(int) intValue;

-(void)test:(int) intValue: andAge:(int) age;



static关键字使用

static修饰局部变量:延长局部变量的生命周期

全局变量:当前变量只能在当前文件中使用

修饰函数:函数只能在当前问文件中使用

注意:static不能修饰实例变量

static不能修饰对象方法



self和super关键字的介绍

super 发送消息可以将方法实现分发其父类。可以重写一个已有的方法来修饰或将他添加到现有方法中,仍然可以将原始的方法纳入到修改后的方法中

self在对象方法中使用其指代的是当前类方法的对象


self 在类方法中使用其指代的是当前类

self 修饰变量在对象方法中可以利用self ->属性名称的方式访问成员变量

当存在局部变量名和成员变量名同名的时候


self  谁调用当前方法,self就代表谁

self在对象方法中,self就代表当前对象

self在类方法中,self就代表类

[self 方法名称];调用其他方法(类方法\对象方法)



继承::

注意点:基类的私有能被继承,但是不能被使用

OC中继承是但继承的:也就是说一个类只能一个父类,不能继承多个父类

方法的重写:

从父类继承的方法,可能这个方法并不适合子类,可以再在类中重写父类的 方法;

可以使用[super 方法名],调用父类的方法

继承的注意事项:

子类不能定义和父类同名的变量,但是可以继承父类的变量

OC类支持单一继承,不支持多继承

OC中类支持多层继承

继承体系 中方法调用的顺序

1、在自己类中找

2、如果没有,就去父类中找

3、如果父类中没有,就去父类的父类中找

4、如果父类的父类没有,就还往上找,知道基类(NSObject)

5、如果NSObject也没有就报错


实例变量修饰符:

@public (公开的)在有对象的前提下,任何地方都可直接访问。

@protected(受保护的)只能在当前类和子类的对象方法中访问

@private(私有的)只能在当前类中使用

@package(框架级别的)作用域介于私有和公开之间,只要处于同一个框架中就可以直接通过变量名访问

<span style="font-size: 18px;">@interface  Person :NSObject
{
      @private
       int age;
       @public
       NSString *name;
       @protected
       NSString *sex; 
}</span>


在@interface  @end之间声明的成员变量如果不做特别的说明,默认是Protected的


OC中私有变量

在类.m@implementation中也可以声明成员变量,但是不在头文件中,所以在其他类中导入头文件的时候,并不能使用这个成员变量

在类的声明中用@private 关键字修饰,那么该变量只能在本类中使用,可以被继承,但是不可以被访问。
在类的声明中用@protected 关键字修饰,该变量只能在本类和子类中使用
在类扩展中定义的成员变量,是私有的
在.m文件中定义的变量,是纯私有的变量,不能被继承,也不能被访问。
利用@property 生成的下划线实例变量也是属于纯私有的。

description方法及重写

description方法默认返回对象的描述信息(默认实现是类返回类名和对象的内存地址)

NSLog(@"%@",objectA);会自动调用objectA 的Description方法来输出ObjectA 的描述信息

重写description方法

view plaincopy

  1. -(NSString *)description{
  2. return  [NSString stringWithFormat:@"年龄:%d",age);  
  3. }  
  4. +(NSString *){
  5. description{return @“重写description”;
  6. }  

注意:千万不能在对象description方法中同时使用%@和self

  1. -(NSString *)description{
  2. return [NSString stringWithFormat:@"%@",self];
  3. }
  4.   //同时使用了%@和self,代表要调用了self 的descriptiona方法,程序进入死循环


资源下载链接为: https://pan.quark.cn/s/1bfadf00ae14 华为移动服务(Huawei Mobile Services,简称 HMS)是一个全面开放的移动服务生态系统,为企业和开发者提供了丰富的工具和 API,助力他们构建、运营和推广应用。其中,HMS Scankit 是华为推出的一款扫描服务 SDK,支持快速集成到安卓应用中,能够提供高效且稳定的二维码和条形码扫描功能,适用于商品扫码、支付验证、信息获取等多种场景。 集成 HMS Scankit SDK 主要包括以下步骤:首先,在项目的 build.gradle 文件中添加 HMS Core 库和 Scankit 依赖;其次,在 AndroidManifest.xml 文件中添加相机访问和互联网访问权限;然后,在应用程序的 onCreate 方法中调用 HmsClient 进行初始化;接着,可以选择自定义扫描界面或使用 Scankit 提供的默认扫描界面;最后,实现 ScanCallback 接口以处理扫描成功和失败的回调。 HMS Scankit 内部集成了开源的 Zxing(Zebra Crossing)库,这是一个功能强大的条码和二维码处理库,提供了解码、生成、解析等多种功能,既可以单独使用,也可以与其他扫描框架结合使用。在 HMS Scankit 中,Zxing 经过优化,以更好地适应华为设备,从而提升扫描性能。 通常,ScanKitDemoGuide 包含了集成 HMS Scankit 的示例代码,涵盖扫描界面的布局、扫描操作的启动和停止以及扫描结果的处理等内容。开发者可以参考这些代码,快速掌握在自己的应用中实现扫码功能的方法。例如,启动扫描的方法如下: 处理扫描结果的回调如下: HMS Scankit 支持所有安卓手机,但在华为设备上能够提供最佳性能和体验,因为它针对华为硬件进行了
标题基于SpringBoot+Vue的社区便民服务平台研究AI更换标题第1章引言介绍社区便民服务平台的研究背景、意义,以及基于SpringBoot+Vue技术的研究现状和创新点。1.1研究背景与意义分析社区便民服务的重要性,以及SpringBoot+Vue技术在平台建设中的优势。1.2国内外研究现状概述国内外在社区便民服务平台方面的发展现状。1.3研究方法与创新点阐述本文采用的研究方法和在SpringBoot+Vue技术应用上的创新之处。第2章相关理论介绍SpringBoot和Vue的相关理论基础,以及它们在社区便民服务平台中的应用。2.1SpringBoot技术概述解释SpringBoot的基本概念、特点及其在便民服务平台中的应用价值。2.2Vue技术概述阐述Vue的核心思想、技术特性及其在前端界面开发中的优势。2.3SpringBoot与Vue的整合应用探讨SpringBoot与Vue如何有效整合,以提升社区便民服务平台的性能。第3章平台需求分析与设计分析社区便民服务平台的需求,并基于SpringBoot+Vue技术进行平台设计。3.1需求分析明确平台需满足的功能需求和性能需求。3.2架构设计设计平台的整体架构,包括前后端分离、模块化设计等思想。3.3数据库设计根据平台需求设计合理的数据库结构,包括数据表、字段等。第4章平台实现与关键技术详细阐述基于SpringBoot+Vue的社区便民服务平台的实现过程及关键技术。4.1后端服务实现使用SpringBoot实现后端服务,包括用户管理、服务管理等核心功能。4.2前端界面实现采用Vue技术实现前端界面,提供友好的用户交互体验。4.3前后端交互技术探讨前后端数据交互的方式,如RESTful API、WebSocket等。第5章平台测试与优化对实现的社区便民服务平台进行全面测试,并针对问题进行优化。5.1测试环境与工具介绍测试
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值