美文网首页
Objective-C三大特性之:多肽

Objective-C三大特性之:多肽

作者: 无极战思 | 来源:发表于2020-06-23 19:13 被阅读0次

概念

简单来讲:父类指针指向子类对象。

它是面向对象程序设计的一个重要特征,动态类型能使程序直到运行时才确定对象的真实类型,动态类型绑定能使程序直到运行时才确定要对那个对象调用的方法。
Objective-c 是动态语言,所以它具有动态类型和动态绑定的特性。Objective-c系统总是跟踪对象所属的类。对于类型的判断和方法的确定都是在运行时进行。

在代码里面的具体体现

  Pet.h文件
 @interface Pet : NSObject
 @property (nonatomic,strong) NSString *name;
 - (void)eatFood;
 - (void)drink;
 Pet.m文件
 import "Pet.h"
 @implementation Pet
 @synthesize name;

- (id)init{
   if (self = [super init])
 {
   self.name=@"Pet Demo";
 }
   return self;
 }
 - (void)eatFood
 {
  NSLog(@"PetEatFood");
 }
 - (void)drink
 {
  NSLog(@"petDrink");
 }
  Dog.h文件
 @interface Dog : Pet
 @end
 Dog.m文件
 - (void)eatFood
 {
  NSLog(@"%@:dogeatFood",self.name);
 }
  Cat.h文件
 @interface Cat : Pet
 @end
 Cat.m文件
 - (void)eatFood
 {
  [super eatFood];//通过super关键字可以调用基类的eatFood函数
  NSLog(@"%@:cateatFood",self.name);
}

我们定义了一个Pet基类,里面有一个数据成员name,和两个函数成员eatFood和drink, Dog和Cat是从Pet派生的两个类,他们重写了基类eatFood的drink方法。

代码使用:

 Pet*pet = [[Dog alloc]init];
 [pet eatFood];
 NSLog(@"PetAddressOrDogAddress=%@",pet);
 pet = [[Cat alloc]init];
 [pet eatFood];
 NSLog(@"PetAddressOrCatAddress=%@",pet);
 [pet drink];
 NSLog(@"PetAddressOrCatAddress=%@",pet);

输出如下:

  2020-06-23 20:30:55.838586+0800 gcdLock[1842:81235] PetDemo:dogeatFood
  2020-06-23 20:30:55.838791+0800 gcdLock[1842:81235] PetAddressOrDogAddress=<Dog: 0x600000228700>
  2020-06-23 20:30:57.963798+0800 gcdLock[1842:81235] PetEatFood
  2020-06-23 20:30:57.963981+0800 gcdLock[1842:81235] Pet Demo:cateatFood
  2020-06-23 20:30:57.964126+0800 gcdLock[1842:81235] PetAddressOrCatAddress=<Cat: 0x600000234650>
  2020-06-23 20:30:57.964267+0800 gcdLock[1842:81235] i am  Pet Demo.

相关文章

网友评论

      本文标题:Objective-C三大特性之:多肽

      本文链接:https://www.haomeiwen.com/subject/yywhfktx.html