Object-C 学习笔记(九)---面相对象(多态)

原创 2013年12月03日 12:23:18

多态:父类引用指向于子类对象,产生多态,子类方法覆盖父类方法.

注意:多态只作用于方法,对成员属性没有起作用.

例子:

//
//  Animal.h
//  Extend
//
//  Created by 5016 on 13-12-3.
//  Copyright (c) 2013年 dradon. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface Animal : NSObject

@property(retain,nonatomic)NSString* name;//名字
@property(assign,nonatomic)NSInteger age;//年龄
@property(retain,nonatomic)NSString* color;//毛色

-(void)play;
-(void)sleep;
-(Animal *)initWithName:(NSString*)name andAge:(NSInteger) age andColor:(NSString*) color;
@end

//
//  Animal.m
//  Extend
//
//  Created by 5016 on 13-12-3.
//  Copyright (c) 2013年 dradon. All rights reserved.
//

#import "Animal.h"

@implementation Animal

@synthesize name = _name,age = _age,color = _color;

-(void)play
{
    NSLog(@"我正在玩耍");
}

-(void)sleep
{
    NSLog(@"我正在睡觉");
}

-(Animal *)initWithName:(NSString*)name andAge:(NSInteger) age andColor:(NSString*) color
{
    if (self = [super init]) {
        self.name = name;
        self.age = age;
        self.color = color;
    }
    return self;
}
@end

//
//  Dog.h
//  Extend
//
//  Created by 5016 on 13-12-3.
//  Copyright (c) 2013年 dradon. All rights reserved.
//

#import "Animal.h"

@interface Dog : Animal
-(void)watchDoor;

-(void)play;//复写父类的方法
@end

//
//  Dog.m
//  Extend
//
//  Created by 5016 on 13-12-3.
//  Copyright (c) 2013年 dradon. All rights reserved.
//

#import "Dog.h"

@implementation Dog
-(void)watchDoor
{
    NSLog(@"正在看门口");
}


-(void)play//复写父类的方法
{
    NSLog(@"狗正在玩啥");
}

@end

//
//  Cat.h
//  Extend
//
//  Created by 5016 on 13-12-3.
//  Copyright (c) 2013年 dradon. All rights reserved.
//

#import "Animal.h"

@interface Cat : Animal
-(void)catchMouse;

-(void)play;//复写父类的方法
@end

//
//  Cat.m
//  Extend
//
//  Created by 5016 on 13-12-3.
//  Copyright (c) 2013年 dradon. All rights reserved.
//

#import "Cat.h"

@implementation Cat
-(void)catchMouse
{
    NSLog(@"猫正在抓老鼠");
}

-(void)play//复写父类的方法
{
     NSLog(@"猫正在玩啥");
}

@end

//
//  main.m
//  Extend
//
//  Created by 5016 on 13-12-3.
//  Copyright (c) 2013年 dradon. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Animal.h"
#import "Cat.h"
#import "Dog.h"

void method(Animal *animal)
{
    [animal play];
}

int main(int argc, const char * argv[])
{
    Animal *animal1 = [[Dog alloc] initWithName:@"考拉" andAge:4 andColor:@"白色"];//父类引用指向子类对象,发生多态,方法覆盖
    method(animal1);
    
    Animal *animal2 = [[Cat alloc] initWithName:@"猫咪" andAge:2 andColor:@"黄色"];
    method(animal2);
    
    return 0;
}

打印结果:


可以看到:父类引用指向于子类,调用时父类方法被覆盖


相关文章推荐

Object-C 学习笔记(八)---面相对象(继承)

类:是事物共性的抽象. 对象:是一个事物的具体表现. 继承特点: (1)Object-C是一种单继承的面相对象语言. (2)提高代码的复用性. (3)提高代码的扩展性 缺点...

OC学习笔记(9)Object-C多态的使用

1、基类ASShape //.h #import @interface ASShape : NSObject -(void) draw; @end //.m #import "ASShape.h"...

Object-C 学习笔记(三十)--- 归档(3)---对象归档

对象归档:把对象的数据归档到文件上,编程一种有结构型的文件数据,实现NSCoding协议(接口),实现归档与解档两个方法. 下面实例是一个对象归档是实例 // // User.h // def...

Object-C学习笔记二-----面向对象编程基础知识

其是学过语言的都基本知道面向对象的概念OOP(Object-Oriented Programming),由于自己学习编程时间不长,理解不是很透澈,只是照本宣科,自己理解为主。 关键词: Indire...

Object-c学习笔记十一-----对象初始化

创建新对象有两个方法:第一种方法就是[类名 new] ,第二种方法是[[类名 alloc ] init ],这两种方法时等价的。 在Cocoa里面常用的则是alloc和init方法。 alloc实...

Object-c学习笔记(一):对象的声明及初始化

一,类的声明 类的声明包括两部分,声明部分及实现部分,下面以Person类的声明为例: 1     Person.h:   .h文件中主要是对类的声明(包括实例变量及方法等) #impo...

Object-c基础编程学习笔记-对象初始化

1、对象分配 alloc方法,做了两件事:一件是为类分配一块内存,
  • cjfire
  • cjfire
  • 2014年08月30日 12:43
  • 596

ios学习笔记一之Object-c基础

源代码文件扩展名头文件.h 实现文件.m类的定义@ interface SimpleClass: NSObject ..代码片段 @end类的属性@property (readonly)属性类型 ...

ios学习笔记之Object-C—字符串

在Object-c中,字符串的声明是: NSString *aString;  aString并不真正包含一个字符串对象—它是指向内存中字符串对象的指针。(和C语言中,用指针指向字符串的声明类似); ...

OC学习笔记(8)Object-C组合使用

1、ASPoint类 //.h #import @interface ASPoint : NSObject @property(nonatomic,assign) double x; @prop...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Object-C 学习笔记(九)---面相对象(多态)
举报原因:
原因补充:

(最多只允许输入30个字)