热门标签 | HotTags
当前位置:  开发笔记 > 程序员 > 正文

OC学习笔记之多态

什么是多态考虑一个问题:父类能否访问子类的方法多态就是某一类事物的多种形态。在程序中的多态:不同对象以自己的方式,响应相同名称方法的能力称为多态(不同的对象以自己的方式相应父类
什么是多态
    考虑一个问题:父类能否访问子类的方法
    多态就是某一类事物的多种形态。在程序中的多态:不同对象以自己的方式,响应相同名称方法的能力
    称为多态(不同的对象以自己的方式相应父类同名的方法,这就是多天)


多态的条件
   1.有继承关系
   2.有方法重写//子类把父类的同名方法重写
   //代码体现:用父类的类型的指针指向子类对象,这就是多态
   Dog *g = [Dog new];
   Animal *a = [Dog new];//多态
       
多态的优点
   简化编程接口。他允许在类和类之间重用一些习惯性的命名。而不用为每一个新家的函数明明一个新的名字。
   这样,编程接口就是一些抽象的行为的集合,从而和实现接口的类区别开来。多态也使得代码可以分散在不
   同的对象中而不用试图在一个函数中考虑到所有可能的对象。这样使得您的代码扩展性和复用性更好一些。
   当一个新的情景出现的是后,您无需对现有的代码进行改动,而只需要增加一个新的类和新的同名方法。



多态的实现
  1.子类继承父类
  2.子类重写父类的方法
  3.父类指针指向子类对象
     Dog *g = [Dog new];
     Animal *a = [Dog new];//多态
     [a run];
     run方法被Dog重写过,所以运行的Dog中的run.


多态的原理
    程序直到运行的时候,才知道执行时才确定对象所有的类型。
    动态类型的绑定使程序直到执行时才确定要对对象调用的实际的方法
    OC不同于传统的程序设计语言, 他可以运行时加入新的数据类型和新的程序模块:动态类型
         识别,动态绑定,动态加载
    id类型:通用指针类型,弱类型,编译时不进行检查。




多态的注意点
   1.父类可以调用子类的方法,并且该方法不存在于父类
      Animal *a = [Dog new];
      [a eat];//这样写的话,无法执行,因为Animal的.m文件中并没有eat方法


      Animal *a = [Dog new];
      [(Dog *)a eat];//这样就OK了,进行了一次强制转换


      Animal a = [Animal new];
      [(Dog *)a8 eat];//这样强制转换不可行,程序编译时没有错误,但是运行的时候,会报错
推荐阅读
  • 本文详细介绍了MicroATX(也称Mini ATX)和MATX主板规格,探讨了它们的结构特点、应用场景及对电脑系统成本和性能的影响。同时,文章还涵盖了相关操作系统的实用技巧,如蓝牙设备图标删除、磁盘管理等。 ... [详细]
  • 本文探讨了领域驱动设计(DDD)的核心概念、应用场景及其实现方式,详细介绍了其在企业级软件开发中的优势和挑战。通过对比事务脚本与领域模型,展示了DDD如何提升系统的可维护性和扩展性。 ... [详细]
  • 本文总结了Java程序设计第一周的学习内容,涵盖语言基础、编译解释过程及基本数据类型等核心知识点。 ... [详细]
  • 本文详细介绍了如何在 Windows 环境下使用 node-gyp 工具进行 Node.js 本地扩展的编译和配置,涵盖从环境搭建到代码实现的全过程。 ... [详细]
  • 深入理解Shell脚本编程
    本文详细介绍了Shell脚本编程的基础概念、语法结构及其在操作系统中的应用。通过具体的示例代码,帮助读者掌握如何编写和执行Shell脚本。 ... [详细]
  • Startup 类配置服务和应用的请求管道。Startup类ASP.NETCore应用使用 Startup 类,按照约定命名为 Startup。 Startup 类:可选择性地包括 ... [详细]
  • 本文介绍了多个关于JavaScript的书籍资源、实用工具和编程实例,涵盖从入门到进阶的各个阶段,帮助读者全面提升JavaScript编程能力。 ... [详细]
  • 本文详细探讨了JDBC(Java数据库连接)的内部机制,重点分析其作为服务提供者接口(SPI)框架的应用。通过类图和代码示例,展示了JDBC如何注册驱动程序、建立数据库连接以及执行SQL查询的过程。 ... [详细]
  • MySQL索引详解与优化
    本文深入探讨了MySQL中的索引机制,包括索引的基本概念、优势与劣势、分类及其实现原理,并详细介绍了索引的使用场景和优化技巧。通过具体示例,帮助读者更好地理解和应用索引以提升数据库性能。 ... [详细]
  • 深入理解Redis的数据结构与对象系统
    本文详细探讨了Redis中的数据结构和对象系统的实现,包括字符串、列表、集合、哈希表和有序集合等五种核心对象类型,以及它们所使用的底层数据结构。通过分析源码和相关文献,帮助读者更好地理解Redis的设计原理。 ... [详细]
  • 2022年单片机课程(机器人工程)教学反思
    本文对2022年单片机类课程的教学进行了全面反思,分析了教学过程中遇到的问题,并探讨了未来改进的方向。 ... [详细]
  • 本文将介绍网易NEC CSS框架的规范及其在实际项目中的应用。通过详细解析其分类和命名规则,探讨如何编写高效、可维护的CSS代码,并分享一些实用的学习心得。 ... [详细]
  • 本文详细介绍了Java中的三大类设计模式:创建型模式、结构型模式和行为型模式,并探讨了设计模式遵循的六大原则,帮助开发者更好地理解和应用这些模式。 ... [详细]
  • 分享一个简化版的Silverlight链接图项目:Link Map Simplified
    本文介绍了一个使用Silverlight开发的可视化工具,主要用于展示和操作复杂的实体关系图(Graph)。该工具在犯罪调查系统中得到了广泛应用,帮助用户直观地获取和理解相关信息。 ... [详细]
  • 探索电路与系统的起源与发展
    本文回顾了电路与系统的发展历程,从电的早期发现到现代电子器件的应用。文章不仅涵盖了基础理论和关键发明,还探讨了这一学科对计算机、人工智能及物联网等领域的深远影响。 ... [详细]
author-avatar
电信他爹_186
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有