OC三大特性之一:多态的介绍

binning模式下和normal模式下相同曝光参数相同场景加权亮度差异消除方案优化(一) 摘要:针对ISP参数设置中浮点权重系数需转换为整数的问题,提出整数邻域搜索方案。该方法在浮点最优解附近(±1/±2)进行局部搜索,通过逐阶微调找到误差最小的整数权重组合,避免直接取整导致的误差反弹(误差从0.8%降至0.35%)。方案结合范围约束(1~15)和单调性约束(暗端递减、亮端递增),兼顾计算效率(单图耗时<10ms)与硬件兼容性,显著优于暴力搜索和简单取整,满足工程落地需求。 阅读详情

 

三、多态

多态对于面向对象思想来说,个人感觉是真的很重要,他对以后的编写代码的优雅方式也是起到很重要的作用,其实现在很多设计模式中大部分都是用到了多态的特性,Java中的多态特性用起来很是方便的,但是C++中就很难用了,其实多态说白了就是:定义类型和实际类型,一般是基于接口的形式实现的,不多说了,直接看例子吧:

打印机的例子

抽象的打印机类Printer

Printer.h

[objc]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. //  
  2. //  Printer.h  
  3. //  07_DynamicDemo  
  4. //  
  5. //  Created by jiangwei on 14-10-11.  
  6. //  Copyright (c) 2014年 jiangwei. All rights reserved.  
  7. //  
  8.   
  9. #import <Foundation/Foundation.h>  
  10.   
  11. @interface Printer : NSObject  
  12.   
  13. - (void) print;  
  14.   
  15. @end  
就是一个简单的方法print

Printer.m

[objc]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. //  
  2. //  Printer.m  
  3. //  07_DynamicDemo  
  4. //  
  5. //  Created by jiangwei on 14-10-11.  
  6. //  Copyright (c) 2014年 jiangwei. All rights reserved.  
  7. //  
  8.   
  9. #import "Printer.h"  
  10.   
  11. @implementation Printer  
  12.   
  13. - (void)print{  
  14.     NSLog(@"打印机打印纸张");  
  15. }  
  16.   
  17. @end  
实现也是很简单的


下面来看一下具体的子类

ColorPrinter.h

[objc]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. //  
  2. //  ColorPrinter.h  
  3. //  07_DynamicDemo  
  4. //  
  5. //  Created by jiangwei on 14-10-11.  
  6. //  Copyright (c) 2014年 jiangwei. All rights reserved.  
  7. //  
  8.   
  9. #import "Printer.h"  
  10.   
  11. //修改父类的打印行为  
  12. @interface ColorPrinter : Printer  
  13. - (void)print;  
  14. @end  


ColorPrinter.m

[objc]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. //  
  2. //  ColorPrinter.m  
  3. //  07_DynamicDemo  
  4. //  
  5. //  Created by jiangwei on 14-10-11.  
  6. //  Copyright (c) 2014年 jiangwei. All rights reserved.  
  7. //  
  8.   
  9. #import "ColorPrinter.h"  
  10.   
  11. @implementation ColorPrinter  
  12.   
  13. - (void)print{  
  14.     NSLog(@"彩色打印机");  
  15. }  
  16.   
  17. @end  

在看一下另外一个子类

BlackPrinter.h

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. //  
  2. //  BlackPrinter.h  
  3. //  07_DynamicDemo  
  4. //  
  5. //  Created by jiangwei on 14-10-11.  
  6. //  Copyright (c) 2014年 jiangwei. All rights reserved.  
  7. //  
  8.   
  9. #import "Printer.h"  
  10.   
  11. @interface BlackPrinter : Printer  
  12.   
  13. - (void)print;  
  14.   
  15. @end  

BlackPrinter.m

[objc]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. //  
  2. //  BlackPrinter.m  
  3. //  07_DynamicDemo  
  4. //  
  5. //  Created by jiangwei on 14-10-11.  
  6. //  Copyright (c) 2014年 jiangwei. All rights reserved.  
  7. //  
  8.   
  9. #import "BlackPrinter.h"  
  10.   
  11. @implementation BlackPrinter  
  12.   
  13. - (void)print{  
  14.     NSLog(@"黑白打印机");  
  15. }  
  16.   
  17. @end  


这里我们在定义一个Person类,用来操作具体的打印机

Person.h

[objc]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. //  
  2. //  Person.h  
  3. //  07_DynamicDemo  
  4. //  
  5. //  Created by jiangwei on 14-10-11.  
  6. //  Copyright (c) 2014年 jiangwei. All rights reserved.  
  7. //  
  8.   
  9. #import <Foundation/Foundation.h>  
  10.   
  11. #import "ColorPrinter.h"  
  12. #import "BlackPrinter.h"  
  13.   
  14. //扩展性不高,当我们需要添加一个新的打印机的时候还要定义对应的一个方法  
  15. //所以这时候就可以使用多态技术了  
  16.   
  17. @interface Person : NSObject{  
  18.     NSString *_name;  
  19. }  
  20.   
  21. //- (void) printWithColor:(ColorPrinter *)colorPrint;  
  22.   
  23. //- (void) printWithBlack:(BlackPrinter *)blackPrint;  
  24.   
  25. - (void) doPrint:(Printer *)printer;  
  26.   
  27. @end  


Person.m

[objc]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. //  
  2. //  Person.m  
  3. //  07_DynamicDemo  
  4. //  
  5. //  Created by jiangwei on 14-10-11.  
  6. //  Copyright (c) 2014年 jiangwei. All rights reserved.  
  7. //  
  8.   
  9. #import "Person.h"  
  10.   
  11. @implementation Person  
  12.   
  13. /* 
  14. - (void) printWithColor:(ColorPrinter *)colorPrint{ 
  15.     [colorPrint print]; 
  16. } 
  17.  
  18. - (void) printWithBlack:(BlackPrinter *)blackPrint{ 
  19.     [blackPrint print]; 
  20. } 
  21.  */  
  22.   
  23. - (void) doPrint:(Printer *)printer{  
  24.     [printer print];  
  25. }  
  26.   
  27. @end  

再来看一下测试代码:

main.m

[objc]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. //  
  2. //  main.m  
  3. //  07_DynamicDemo  
  4. //  
  5. //  Created by jiangwei on 14-10-11.  
  6. //  Copyright (c) 2014年 jiangwei. All rights reserved.  
  7. //  
  8.   
  9. #import <Foundation/Foundation.h>  
  10.   
  11. #import "Person.h"  
  12. #import "BlackPrinter.h"  
  13. #import "ColorPrinter.h"  
  14.   
  15. int main(int argc, const charchar * argv[]) {  
  16.     @autoreleasepool {  
  17.           
  18.         Person *person =[[Person alloc] init];  
  19.           
  20.         ColorPrinter *colorPrint = [[ColorPrinter alloc] init];  
  21.         BlackPrinter *blackPrint = [[BlackPrinter alloc] init];  
  22.           
  23.         //多态的定义  
  24.         /* 
  25.         Printer *p1 = [[ColorPrinter alloc] init]; 
  26.         Printer *p2 = [[BlackPrinter alloc] init]; 
  27.          
  28.         [person doPrint:p1]; 
  29.         [person doPrint:p2]; 
  30.          */  
  31.           
  32.         //通过控制台输入的命令来控制使用哪个打印机  
  33.         int cmd;  
  34.         do{  
  35.             scanf("%d",&cmd);  
  36.             if(cmd == 1){  
  37.                 [person doPrint:colorPrint];  
  38.             }else if(cmd == 2){  
  39.                 [person doPrint:blackPrint];  
  40.             }  
  41.         }while (1);  
  42.           
  43.     }  
  44.     return 0;  
  45. }  


下面就来详细讲解一下多态的好处

上面的例子是一个彩色打印机和黑白打印机这两种打印机,然后Person类中有一个操作打印的方法,当然这个方法是需要打印机对象的,如果不用多态机制实现的话(Person.h中注释的代码部分),就是给两种打印机单独定义个操作的方法,然后在Person.m(代码中注释的部分)中用具体的打印机对象进行操作,在main.m文件中,我们看到,当Person需要使用哪个打印机的时候,就去调用指定的方法:

[objc]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. [person printWithBlack:blackPrint];//调用黑白打印机  
  2. [person printWithColor:colorPrint];//调用彩色打印机  
这种设计就不好了,为什么呢?假如现在又有一种打印机,那么我们还需要在Person.h中定义一种操作这种打印机的方法,那么后续如果在添加新的打印机呢?还在添加方法吗?那么Person.h文件就会变得很臃肿。所以这时候多态就体现到好处了,使用父类类型,在Person.h中定义一个方法就可以了:

[objc]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. - (void) doPrint:(Printer *)printer;  
这里看到了,这个方法的参数类型就是父类的类型,这就是多态,定义类型为父类类型,实际类型为子类类型

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. - (void) doPrint:(Printer *)printer{  
  2.     [printer print];  
  3. }  
这里调用print方法,就是传递进来的实际类型的print方法。

[objc]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. Printer *p1 = [[ColorPrinter alloc] init];  
  2. Printer *p2 = [[BlackPrinter alloc] init];  
  3.           
  4. [person doPrint:p1];  
  5. [person doPrint:p2];  
这里的p1,p2表面上的类型是Printer,但是实际类型是子类类型,所以会调用他们自己对应的print方法。


从上面的例子中我们就可以看到多态的特新很是重要,当然也是三大特性中比较难理解的,但是在coding的过程中,用多了就自然理解了,没必要去刻意的理解。


Java的API帮助文档 JDK帮助文档 SUN公司为JDK工具包提供了一整套文档资料,我们习惯上称之为JDK文档。 JDK文档中提供了Java中的各种技术的详细资料,以及JDK中提供的各种类的帮助说明。 JDk文档是Java语言的完整说明,大多数书籍中的类的介绍都要参照它来完成,它是编程者经常查阅的资料 如何理解API:就当做是一个“字典”,“使用手册”,API就相当于是一个电子的帮助文档,可以帮我们查看JDK提供的类的信息,平时查看的时候可结合百度一起看。 官网下载: 1、登录Oracle官网(Oracl. 阅读详情

相关推荐

微信小程序协同工作和发布

微信小程序协同工作和发布

qq_53114527的博客 1620

OC三大特性之--多态

1、基本介绍 多态对于面向对象思想来说,个人感觉是真的很重要,他对以后的编写代码的优雅方式也是起到很重要的作用,其实现在很多设计模式中大部分都是用到了多态的特性,Java中的多态特性用起来很是方便的,但是C++中就很难用了,其实多态说白了就是:定义类型和实际类型,一般是基于接口的形式实现的,不多说了,直接看例子吧: 打印机的例子 抽象的打印机类Printer Printer.h ...

weixin_33969116的博客 428

新手入门:N-CMAPSS数据集解析与实战指南

本文详细解析了N-CMAPSS数据集的结构与应用,为新手提供航空发动机故障预测的实战指南。通过Python代码示例展示数据加载、探索和特征工程技巧,帮助读者快速掌握剩余寿命(RUL)预测的关键步骤,并分享常见问题解决方案与进阶学习路径。

weixin_29056701的博客 376

OC学习篇之---类的三大特性(封装,继承,多态)

之前的一片文章介绍了OC中类的初始化方法和点语法的使用:http://blog.youkuaiyun.com/jiangwei0910410003/article/details/41683873,今天来继续学习OC中的类的三大特性,我们在学习Java的时候都知道,类有三大特性:继承,封装,多态,这个也是介绍类的时候,必须提到的话题,那么今天就来看一下OC中类的三大特性:一、封装学习过Java中类的同学可...

weixin_30399821的博客 392

MuJoCo新手必看:5分钟搞定你的第一个机器人仿真(附Python代码)

本文为零基础新手提供了一份详尽的MuJoCo物理仿真引擎入门指南。从环境搭建、MJCF模型文件解析,到编写Python控制代码,手把手教你5分钟内创建并运行第一个机器人仿真。内容涵盖双摆模型控制与自定义四轮小车构建,帮助你快速掌握这一高性能开源工具,迈出机器人学与强化学习仿真的第一步。

weixin_29032489的博客 655

【RF】Receiver Function接收函数:从理论到实践的深度解析

本文深入解析地震学中的接收函数(Receiver Function, RF)技术,从理论原理到实践操作。文章将RF比作地球的“听诊器”,详细阐述了其通过反褶积剥离震源影响、揭示地下结构(如莫霍面)的核心机制,并提供了使用Python和rf库进行数据处理、计算、动校正与叠加的完整实战流程,同时探讨了其应用、局限性与常见问题的解决方案。

Jerry的专栏 121

OC三大特性之一:继承的介绍

继承:     就是一个类A拥有了类B的所有属性和方法       代码中实现继承:             定义类的时候,在类名后面加:然后接要继承的类名       父类:被继承的那个类       子类:继承的那个类       基类:就是父类,或者也指NSObject       根类:NSObject

iOS_houyimin的博客 503

ComfyUI安装包运行前准备:增加虚拟内存

在Windows系统中,虚拟内存是一种重要的系统资源管理机制,它主要通过将硬盘空间用作内存来扩展系统的可用内存容量。以下是虚拟内存的主要作用: 1. 扩展物理内存容量 当物理内存(RAM)不足时,系统会将一部分数据从内存转移到硬盘上的虚拟内存区域(也称为“分页文件”或“交换文件”)。这样可以为正在运行的程序提供额外的“内存空间”,确保系统能够继续运行,而不会因为内存不足而崩溃。 2. 提高系统稳定性 虚拟内存为系统提供了一个缓冲区。如果没有虚拟内存...

聚梦小课堂 1万+

OC三大特性之一:多态

多态简单来说就是允许将子类类型的指针赋给父类类型的指针。写代码的时候呢,把不同的子类当作父类来看,可以屏蔽子类对象之间的差异,写出通用的代码,可以适应需求的不断变化。 接下来看看我随便写的吃饭的练习: main.m//创建一人(Person)类,人类有多种身份如: //学生(Stud...

162

数据库系统工程师软考备战:第三篇 - SQL语言深入解析与应用

​​创建表​​​修改表​​​删除表​。

Programming Talk 122

【异常】DeepSeek API HTTP 401 认证失败错误完整排查与解决方案

摘要:本文针对DeepSeek API开发中的HTTP 401认证失败错误进行深度解析,指出该错误属于不可重试的认证类问题。文章首先拆解错误日志关键字段,区分401与其他API错误的本质差异。随后提供优先级排序的全链路解决方案:1)检查API密钥有效性;2)规范请求头认证格式;3)排查账户权限状态;4)验证请求环境配置。最后建议通过新建测试密钥、使用官方示例代码或联系技术支持进行兜底处理。全文采用技术脱敏处理,为开发者提供系统性的401错误排查指南。(149字)

奶爸的编程之路,也就一周冷个三天 1531

打印机有黑白的,有彩色的,学校都有打印机,用于打印,现在用多态来描述

package jiCheng_duoTai; //public class DaYinJi { // public static void main(String[] args) { // School s = new School(); // BlackPrinter bp = new BlackPrinter("惠普牌"); // ColorPrinter cp = new ColorPrinter("三星牌"); // s.usePrinter(bp,"武汉大学");//

hey,欢迎浏览我的博客,希望能给你提供帮助。 904

GD32F470移植LWIP协议,PHY芯片DP83848I

也就是说前24位是有规定的,其中48位MAC中的前几位也是有着对应的含义的。2、旧版LWIP(如1.4.1)存在DHCP状态机卡死问题,建议升级至2.1.3+。

m0_61973119的博客 1591

OC-6-三大特性:多态

------- CornerFly真诚期待与您交流! ---------- 一、概述 1、多态:某一类事物的多种形态,OC对象具有多态性。 2、注意点:没有继承就没有多态 3、动态的好处:如果函数\方法中使用的是父类类型,可以传入父类,子类对象 4.局限性:父类类型的变量,不能直接调用子类特有的方法,如果想调用,必须强转为子类类型的变量后,才能直接调用子类特有

wushashawin的博客 356

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

黑马程序员——OC三大特性-7:多态

OC中多态的简单应用

lvzhehappy的专栏 532

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

【Objective-C学习笔记】OC三大特性:封装、继承、多态

第一部分 封装 一、封装的作用 1、过滤不合理的值 2、屏蔽内部的赋值过程 3、让外界不必关注内部的细节 二、set方法和get方法 1、使用场合 被@public修饰的成员变量可以在任何位置随意的赋值,这样很不安全,我们应该使用set方法和get方法来管理成员变量的访问。 #

dite_water的专栏 1014

黑马程序员4 -- os面向对象和三大特性

继续上次的oc面向对象的学习

kakamuz的专栏 524

OC的三大特性

OC的三大特性分别为:封装,继承,多态。 简单说一下三大特性吧。 封装: 封装就是对类中的一些字段,方法进行保护,不被外界所访问到,有一种权限的控制功能,Java中有四种访问权限修饰符: @public @package @protected @privat...

369

[黑马程序员]13[OC语言]OC三大特性部分学习笔记总结

------- android培训、java培训、IOS培训、期待与您交流! ---------- OC三大特性   1.    封装 01. 基本语法   //set方法:成员变量的封装   #import   @interface Student : NSObject {     //@public 以后写成员变量除特殊情况,统统不许写@pu

astina2011的专栏 549

OC中类的三大特性:封装、继承和多态

OC是一门面向对象的变成语言,具有面向兑现的最基本的特征:封装性、继承性、和多态性。 一.封装 为何要用封装? 当定义了一个类时,类中的数据不允许外界访问,或者允许外界只能读取不能修改而需要隐藏时,就需要用到 set方法或者get方法。 1.OC中的set方法 作用:提供外界设置成员变量值,对参数进行过滤 规范: 1>方法名必须以set开头,后面跟上首字母大写的成员变量的名称 2>

ACGJUN的专栏 961

黑马程序员——OC三大特性(继承、多态、封装)

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

jiongjiong_1的专栏 528

OC三大特性

面向对象有三大特征,它们分别是封装、继承、多态。下面我就这几大特征做一个简单的说明。

qq_27016923的专栏 546

OC多态特性详解

多态在OC中,是面向对象的特性。引用Charlie Calverts对多态的描述——多态性是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。在OC中的本质就是:允许将子类类型的指针赋值给父类类型的指针,再调用父类的方法,这个方法既可以是子类重写过的(会执行子类的方法),也可以是父类方法中传入id类型,从而达到多态的

topws1的博客 591

黑马程序员--07 OC 三大特性

三大特性:封装,继承,多态 #封装 #  @public的成员可以被任意赋值,这样数据通过 指针->成员变量名 方式给成员变量赋值,可能被赋值为不合理的数值具有危险性。通过封装后便可解决上述问题,封装的好处:过滤不合理的值,保证数据的安全性; 屏蔽内部的赋值过程;让外界不必关注内部的细节 不使用@public后,便不能通过指针->成员变量名 的方式给成

xizhengmeng的专栏 368

黑马程序员——OC三大特性----封装、继承、多态

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-封装@public的成员可以被随意赋值,这样会使代码不严谨,为了避免这种现象,OC采用了封装,将方法成员封装起来。这时需要使用set方法和get方法来管理成员的访问(类似机场的安检、水龙头过滤,过滤掉不合理的东西)。对于只读即只允许外界访问不允许其修改的变量采用get方法,允许外界访问,并在一定范围内修改变量采用s

qq_26989441的专栏 612

黑马程序员 5 oc三大特性

又是奋斗的一天,继续上次话题!!!

kakamuz的专栏 524

OC - 封装,继承,多态三大特性

文章目录封装继承多态 类有三大特性:继承,封装,多态。让我们来看一下这三大特性 封装 封装就是对类中的一些字段,方法进行保护,不被外界所访问到,有一种权限的控制功能 对一个累或对象实现良好封装,可以实现以下目的: 隐藏类的实现细节 让使用者只能通过事先预定的方法来访问数据,从而可以在该方法里加入逻辑控制,限制对成员变量的不合理访问。 可进行数据检查,从而有利于保证对象信息的完整性 便于修改,提高代码的可维护性 封装实际上有两方面的含义,把该隐藏的隐藏起来,把该暴露的暴露出来。 通过使用访问控制符来实现:

weixin_45841522的博客 417
上一篇: OC三大特性之一:继承的介绍
下一篇: OC三大特性之一:封装的介绍
iOS_houyimin
博客等级 码龄11年 1粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值