继承与多态 类对象
来源:互联网 发布:python脚本怎么写 编辑:程序博客网 时间:2024/05/18 00:20
IOS学习第21天
继承
- NSObject类
1.NSObject 是什么? 是一个类,是所有类的根类2.为什么要继承NSObject 因为所有类需要创建对象,需要用一个new来创建对象,而这个new方法它是在NSObject类中定义 不仅仅是用new方法,还有一些其他方法,比如dealloc,description..都在NSObject中定义 ```* super关键字
1.在对象方法中使用super关键字
在子类的对象方法中,需要调用从父类继承过来的对象方法
a.[self 方法名]
b.[super 方法名];//显示告诉程序员 这个方法是从父类继承
2.在类方法中使用super关键字
在子类的类方法中,需要调用从父类继承过来的类方法
[子类名 类方法名]
[父类名 类方法名]
[self 类方法名];
[super 类方法名];//显示告诉程序员,这个类方法是从父类继承来的
“以后如果在子类中 需要调用从父类继承过来的方法
“我们建议 有super来调用
3.super关键字 不能访问属性,只能调用方法
* 属性的访问修饰符
1.是什么?
是关键字,用来修饰类在.h中直接声明的属性
@public 共用的
@protected 受保护的
@private 私有的
@package 框架级别
2.有什么用
一个类的.h中直接声明的属性用这四种关键字修饰,可以限制属性在当前类和子类中的访问权限.
3.分别有什么作用
“无论是什么属性修饰符,属性都是会被子类继承
所谓的类的内部,就是在当前类的方法中所谓类的外部,就是在main函数中通过该类的对象访问修饰符的权限从大到小: @public > @protected > @private
@public : 在所有的程序中都可以直接访问
@protected:在本类的内部可以直接访问,外部不能直接访问
在子类内部可以直接访问,外部不能直接访问
@private:
在本类的内部可以直接访问,外部不能直接访问
在子类的内部不可以直接访问,外部不能直接访问
4.访问修饰符的作用域
从定义修饰符开始 到下一个修饰符或者是大括号结束
5.使用建议
1>不能用@public
在类内部 直接访问,在类的外部,通过属性的封装访问
2>一般的自己写一个类 都是用@protected修饰,可以不写默认的就是@protected
总结:
@public 在哪都能用
@protected 在父类和子类内部可以用
@private 只能在本类内部使用
“`
- 私有属性和私有方法的应用
1.真私有属性 @private修饰的属性 私有属性 写在.m的@implementation大括号中的属性,叫做真私有属性 私有属性和真私有属性唯一的区别,xcode不会提示2.使用建议: 以后写一个类,一般会有两种属性 一种是在.h中的用@protected修饰的属性 一种是在.m中的真私有属性3.私有方法 只在.m中实现,而不在.h中声明小知识点: "在OC中没有真正的私有 ```### 多态**多态:不同的食物,对于同一种行为,具有不同的表现形式**需要满足的三个条件:**1.有继承关系****2.有方法的重写****3.父类的指针指向子类的对象*** 里氏替换原则
1.什么里氏替换原则 (缩写LSP)
“一句话:
父类的指针 可以指向子类的对象
2.里氏替换原则的好处
举例: 人类 属性:名字 行为:喂狗,喂猫,喂猪(在实现中打印"xxx正在吃shi") 狗类,猫类,猪类 属性:姓名在main函数中 实现人喂猪,喂狗,喂猫的过程
3.里氏替换原则的局限性
父类的指针 可以指向子类的对象
父类的指针 只能访问子类从父类继承过来的属性和方法
不能访问子类独有的成员
“`
* 方法重写
1.什么叫方法的重写? 子类中重新实现父类继承过来的方法2.什么时候需要方法的重写? a.父类继承过来的方法 子类完全不适用,重写方法 b.父类继承过来的方法 子类需要补充,也需要方法的重写,但是重写方法的时候 要使用super关键字 [super 方法名]来先调用一下父类的方法,然后再添加自己要的一些实现3.如何重写方法? "在.m文件,重新实现要重写的方法.不是改声明 也不需要再次声明"强调如果一个父类指针,指向了子类对象,如果通过父类的指针调用子类重写的方法那么调用的是 子类重写后的方法
- description方法
1.%@打印对象的原理 使用%@ 打印对象时,内部的原理 NSLog(@"%@",对象名); 1>调用 [对象名 description]; 返回一个字符串 2>把这个返回的字符串打印到控制台2.如果想要 自定义 打印出对象的格式 那么需要重写这个description方法3.练习: 写一个书类,要求用%@ 打印一本书时 能打印出这本书的信息 ```* 继承的本质1.子类会继承所有属性和方法2.子类创建对象的时候,会再堆区开辟存储空间,但只会开辟属性所占的空间3.子类调用方法时,首先会再本类中寻找,如果有则直接调用,如果没有.会向他直接父类中寻找,如果有直接调用,如果还是没有,会继续向上一级父类中寻找,如果再没有,会一直向上级父类找,指导NSObject这个类,如果这个方法还是没有,则报错* 类是以Class对象的形式存储在代码段中的
@interface Person : NSObject
{
NSString * _name;
}
+ (void)sb;
- (void)sayHi;
@end
1.一个类在内存中以是Class对象的形式存储的
那么这个Class对象就是 代表这个类
2.如何获取存储这个类的Class对象
1>通过[对象名 class]可以获取到Class对象
2>通过[类名 class]可以获取到这个Class对象
3.Class对象 存储了类的所有信息
也就是说Class对象 就代表了这个类
比如:Class cc = [Person class];
“所以:
1.使用Class对象调用类方法 [cc sb] 就可以直接调用类方法
2.使用CLass对象 创建Person对象 [cc new]
类的本质 就是一个对象 Class类型的对象
* SEL数据
1.每一个类 都有方法 其实方法在内存中也是以一种形式存在的
一个方法在内存中 是以 SEL这种数据类型存在的
- //定义一个变量 来存储一个方法 sayHi
SEL sayHiSel;//这是一个变量,这变量可以存储方法
//@selector(方法名) 功能:根据一个方法名 返回一个SEL对象
sayHiSel = @selector(sayHi);
“`
- 类与对象及继承多态
- 继承与多态 类对象
- 类与对象-继承
- 【C++面向对象】类继承、多态与virtual成员
- B 类 对象 继承 多态与动态绑定
- 面向对象中的继承与多态
- 类和对象与继承
- Java学习笔记——类与对象(封装、继承与多态)
- JavaScript 面向对象程序设计(下)--继承与多态
- 【JavaScript】面向对象程序设计-继承与多态
- 面向对象编程:继承、接口与多态
- 黑马程序员-面向对象中的继承与多态
- 黑马程序员-面向对象(继承与多态)
- Python 面向对象编程(三)继承与多态
- Python 面向对象编程(三)继承与多态
- Java--面向对象之继承与多态
- JAVA基础-面向对象之继承与多态
- 面向对象程序设计-继承与多态
- arm64-v8a编译
- 技巧:如何在CSDN博客中编辑公式
- binlog基于时间点的恢复
- Apache Commons DbUtils 快速上手
- html密码框
- 继承与多态 类对象
- iOS_隐藏系统音量(MPVolumeView初探)
- BZOJ1085 [SCOI2005]骑士精神
- 仪仗队【2008年省队选拔赛山东】
- 霓虹国又出了一部脑洞逆天的复仇剧,前方一路高能
- Swift当想打印非换行信息怎么办?
- 别再做职场闷葫芦了
- 邮递员送信(最短路)
- 2449走迷宫