IOS多态

本文探讨了多态的概念,将其作为一种类的抽象,通过父类来概括具有共性的对象,如宠物示例。文章对比了C++和Objective-C实现多态的方式,指出Objective-C中无需virtual关键字,只需子类重写父类方法即可实现覆盖,并且Objective-C不支持函数重载,但可以通过super关键字调用基类方法,这是与C++的一个显著区别。
摘要由CSDN通过智能技术生成

多态其实就是一种类的抽象,我们把某些有共性的对象进行抽象成为父类,然后再为每个不同对象赋予特定的属性。比如说猫狗什么,都可以抽象为宠物,然后你可以规定一些宠物的属性和方法,你想把它当猫就可以添加猫的特性,你想把它当狗就可以添加狗的特性,这样可以简化编程和清晰类结构。

那我们先说说C++的多态实现把

运行时多态需要使用虚函数实现

#include <iostream>
using namespace std;
class Parent
{
public:
         int parent;
         inline Parent(){}
         inline Parent(int parent) { this->parent = parent; }
         inline virtual void haveFun() { cout << "haveFun in Parent" << endl; }
};
 
class Child : public Parent
{
public:
         int child;
         inline Child(){}
         inline Child(int child) : Parent(child + 1) { this->child = child; }
         inline void haveFun() { cout << "haveFun in Child" << endl; }
};
 
int main(void)
{
         Parent* p = new Child(2);
         p->haveFun();
 
         return 0;
}


结果



我们可以看到Child类中得haveFun被调用了。而父类的haveFun没有显示。


那我们看看ObjC中如何实现多态

     #import "Parent.h"
     @implementation Parent
     - (id) init
     {
         if (self = [super init])
         {
         }     
         return self;
     }
     - (void) haveFun
     {
           NSLog(@"haveFun in Parent");
     }
     @end


     #import "Parent.h"
     @interface Child : Parent
     @end

     #import "Child.h"
     @implementation Child
     - (void) haveFun
     {
<span style="white-space:pre">	</span>[super haveFun];
         NSLog(@"haveFun in Child");
     }
     @end

     Parent* p = [[Child alloc] init];
     [p draw];

结果

haveFun in Parent

haveFun in Child



小结:
        1.与C++ 的多态相比,在Objective-c中是没有virtual关键字的,默认情况下只要子类重写了父类的方法就实现了覆盖(这一点和java类似),在Objective-c中同一类中的函数是不能被重载的。


        2.在Objective-c中,通过super关键字可以调用基类的函数,这个在C++中是没有的,在C++中可通过作用域运算符访问基类成员。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值