黑马程序员-[OC]学习之旅-封装、继承
来源:互联网 发布:icq聊天软件下载 编辑:程序博客网 时间:2024/05/18 11:46
类方法的概述:
+表示类方法,就是类调用方法,不依赖任何对象的方法
-表示对象方法,只能对象调用,依赖于任何对象的方法
类的使用注意事项:
类方法可以和实例方法同名,实例方法有实例对象访问调用,类方法要通过类里访问调用。
类方法也可以是从父类继承而来,子类可以重写类方法,
类方法和实例方法一样在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>
OC中私有变量
在类.m@implementation中也可以声明成员变量,但是不在头文件中,所以在其他类中导入头文件的时候,并不能使用这个成员变量
在类的声明中用@private 关键字修饰,那么该变量只能在本类中使用,可以被继承,但是不可以被访问。
在类的声明中用@protected 关键字修饰,该变量只能在本类和子类中使用
在类扩展中定义的成员变量,是私有的
在.m文件中定义的变量,是纯私有的变量,不能被继承,也不能被访问。
利用@property 生成的下划线实例变量也是属于纯私有的。
description方法及重写
description方法默认返回对象的描述信息(默认实现是类返回类名和对象的内存地址)
NSLog(@"%@",objectA);会自动调用objectA 的Description方法来输出ObjectA 的描述信息
重写description方法
view plaincopy
- -(NSString *)description{
- return [NSString stringWithFormat:@"年龄:%d",age);
- }
- +(NSString *){
- description{return @“重写description”;
- }
注意:千万不能在对象description方法中同时使用%@和self
- -(NSString *)description{
- return [NSString stringWithFormat:@"%@",self];
- }
- //同时使用了%@和self,代表要调用了self 的descriptiona方法,程序进入死循环
- 黑马程序员-[OC]学习之旅-封装、继承
- 黑马程序员----OC学习之继承
- 黑马程序员-OC学习笔记-----封装、继承、多态
- 黑马程序员--OC--封装、继承、多态
- 黑马程序员---oc 封装,继承,多态
- 黑马程序员 -- OC语言 封装 继承 多态
- 黑马程序员--OC--封装、继承、多态
- 黑马程序员--OC之继承
- 黑马程序员-OC学习日记四之继承的小结
- 黑马程序员-OC笔记(三)OC 封装 继承 多态
- 黑马程序员_OC学习之封装,继承,多态
- 黑马程序员_OC学习之封装、继承、多态、组合
- 黑马程序员-----OC学习之类的封装
- 黑马程序员-OC语言之封装
- 【黑马程序员】-我的OC学习笔记(2)-封装、继承、多态
- 黑马程序员——OC学习——封装、继承、多态
- 黑马程序员-OC之面向对象的三大特性:封装、继承和多态
- 黑马程序员—IOS基础之OC—类的三大特性封装、继承、多态
- Ubuntu 14.04 安装virtualbox 虚拟机之后无法读取usb 设备问题
- android studio 安装出现两个图标
- tomcat执行一个java类
- WAV文件格式
- 混合时代的开发己经来临
- 黑马程序员-[OC]学习之旅-封装、继承
- 百度地图Baidu LBS 的使用
- 我对“编程平台”的理解
- pjsip编译步骤,centos环境支持视频通话
- 栈的压入,弹出序列
- js中 a : function(){}这是什么格式? 代表什么含义?怎样学习这样的格式?
- MySQL索引与优化
- Java_Annotation详解
- C++数值交换