黑马程序员-oc-多态

------- android培训java培训、期待与您交流! ----------

1,多态的概念:

同一种行为,对于不同的事物具有不同的表现形式。 这就叫做多态。

程序中的多态:不同的对象以自己的方式响应相同名称方法的能力称为多态 

多态的条件:

有继承关系、有方法重写

父类的声明变量指向子类对象。 

代码体现:用父类类型的指针指向了子类对象,这就是多态 

*g = [new];

动物 *a = [new];

[a catch];//实现狗拿耗子的方法

*c = [new];动物 *a = [new]; 

[a catch];//实现猫捉老鼠的方法

 

2,多态的优点:

多态的主要好处就是简化了编程接口。它容许在类和类之间重用一些习惯性的命名,而不用为每一个新加的函数命名一个新名字。这样,编程接口就是一些抽象的行为的集合,从而和实现接口的类的区分开来。

多态也使得代码可以分散在不同的对象中而不用试图在一个函数中考虑到所有可能的对象。这样使得您的代码扩展性和复用性更好一些。当一个新的情景出现时,您无须对现有的代码进行改动,而只需要增加一个新的类和新的同名方法。 


3,多态的原理:

动态绑定:

动态类型能使程序直到执行时才能确定对象所属类型

动态类型绑定能使程序直到执行时才确定要对对象调用的实际方法

oc不同于传统程序设计语言,它可以在运行时加入新的数据类型和新的程序模块:动态类型识别,动态绑定,动态加载

id类型:通用指针类型,弱类型,编译时不进行类型检查

4,多态注意:

1)如果存在多态,父类是可以访问子类特有的方法 

[dog bark];
Animal *an2 = [Dog new];
[(Dog*)an2 bark]; //把父类的指针,强制类型转换

虽然是Animal的指针,但是在堆区的空间里是dog的对象,所以可以强制转换为dog,调用狗的bark方法。

2)如果不存在多态,父类是不可以访问子类特有的方法的 

Animal *an3 = [Animal new];
[(Dog*)an3 bark];
因为在栈区的an3指针指向堆区的Animal对象,即便将其转换强制转换为dog,本身并没有变,还是animal对象。不存在dog的方法。

-------  android培训 java培训 、期待与您交流! ----------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
是面向对象编程中的一个重要概念,它允许不同类型的对象对同一个消息做出不同的响应。基于多的冲突通常是指在继承关系中存在多个同名方法,导致在调用时产生歧义或冲突的情况。 在黑马程序员的教学中,关于基于多的冲突一般会涉及到两种情况: 1. 方法重载冲突:方法重载是指在同一个类中存在多个同名方法,但它们的参数类型和/或个数不同。当我们调用这个方法时,编译器会根据参数类型选择最合适的方法。但如果存在多个方法都符合调用要求,就会产生冲突。这种情况下,编译器无法确定到底应该调用哪个方法,会报错。 2. 方法覆盖冲突:方法覆盖是指子类重写了父类中的同名方法。当我们通过父类的引用调用这个方法时,实际执行的是子类中重写的方法。但如果存在多个子类同时重写了这个方法,并且我们使用父类引用指向不同的子类对象,就会产生冲突。这种情况下,编译器同样无法确定到底应该调用哪个方法,会报错。 为了解决基于多的冲突,我们可以采取以下方法: 1. 方法重载冲突:避免在同一个类中定义多个同名方法,或者通过修改参数类型和/或个数来消除冲突。 2. 方法覆盖冲突:使用强制类型转换或者将父类引用指向具体的子类对象,明确调用具体的重写方法。 在实际开发中,我们需要注意避免基于多的冲突,保持代码的清晰和可维护性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值