黑马程序员--Object-C--03--继承、多态
来源:互联网 发布:java初学书籍 编辑:程序博客网 时间:2024/04/29 16:48
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
一、继承
1、@private 私有成员是不能被继承,也不能被外部函数访问。
2、@public 公有成员能被继承,也能被外部函数访问。
3、@protected 保护成员能够被继承,不能够被外部函数访问。
面向对象编程 (OOP) 语言的一个主要功能就是“继承”。继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。通过继承创建的新类称为“子类”或“派生类”,被继承的类称为“基类”、“父类”或“超类”。继承的过程,就是从一般到特殊的过程。在考虑使用继承时,有一点需要注意,那就是两个类之间的关系应该是“属于”关系。
父类
子类函数的重写,从父类继承的方法,可能这个方法并不适合子类,可以在子类中重写父类的方法。重写之后,父类的对象调用父类的方法;子类的对象,调用子类的方法。不会引起冲突。从父类继承的方法,不适用于子类时,可以直接声明父类的同名函数,并定义。不用考虑父类中,函数已存在的问题。重写后,子类就不能调用父类的方法。继承有两缺点:
(1)当层级越来越多时,假如每个层级都有实例变量,那么最下层的子类继承的实例变量会超级多,沉重;
(2)当消息传递自子类往上时,层级越多,效率越低下。
所以就有了组合。两者是“A is B"关系则是继承,两者是"A has B"则是组合。
二、多态
举个例子,创建Pc父类与LenovePc、DellPc两个子类。
Pc.h
Pc.m
LenovePc.h
LenovePc.m
DellPc.h
DellPc.m
创建Person类实现开机操作
Person.h
Person.m
main.m[person powerWithLenove: (LenovePc *)lenove]
[person powerWithDell: (DellPc *)dell]
如果此时又有了惠普、苹果等等不同的Pc,就需要在Person中扩充开机方法,从而使得Person中的方法臃肿累赘,所以这时候多态就体现到好处了,使用父类类型,在Person.h中定义一个方法就可以了:
- (void) doPower(Pc *)pc;person调用doPower方法,实参看起来是Pc类型,但调用方法的时候会动态监测其真实类型,即LenovePc、DellPc,从而根据真实类型,如果是子类的话就会调用子类的对应方法。
0 0
- 黑马程序员--Object-C--03--继承、多态
- 黑马程序员03--Object-C--03--继承、多态
- 重复的-黑马程序员--Object-C--03--继承、多态
- 黑马程序员------object-c面向对象_继承
- 黑马程序员---object-c知识点总结(一)封装,继承,多态
- 黑马程序员---object-c知识点总结(二)封装,继承,多态
- 黑马程序员---object-c知识点总结(三)封装,继承,多态
- 黑马程序员--------java面向对象 继承、接口、多态、Object类
- 黑马程序员----继承2(接口、多态、object)
- 黑马程序员--Object-C 类别
- 黑马程序员--Object- C简介
- 黑马程序员-Object-C继承.super.多态的用法总结
- 黑马程序员——Object-C基础(六)面向对象的特性:继承
- 黑马程序员-继承,多态
- 黑马程序员----------继承 多态
- 黑马程序员03-继承
- 黑马程序员-Object C之分类
- 黑马程序员-Object-C之构造方法
- python实现将txt文件格式转换为arff格式
- Java关于注解的加深理解
- PS -AUX
- c转c++语法增强
- [人生感悟]实习杂记
- 黑马程序员--Object-C--03--继承、多态
- vs2008(C#) IDE 使用之 菜单栏/编辑 (终)
- 生活想法
- hadoop失败
- C与C++三目运算符的不同
- 《语音信号处理》第二章总结——语音信号基础知识
- 睡觉,睡觉
- C# <%# Eval("aa") %>截取字段的方法
- 破坏索尼影业数据的恶意程序