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;
}

打印结果:


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


JSP九大内置对象与Servlet学习笔记

JSP九大内置对象用途、作用域、生命周期、常用方法、重点知识总结,JSP与Servlet关系心得笔记,望各位大神提出宝贵意见。...
  • zhangliangzi
  • zhangliangzi
  • 2015年11月21日 16:04
  • 4876

JAVA面向对象基础 对象 类 方法学习笔记

面向对象基础 类  构造   对象  使用对象   对象.方法() 类:[访问控制符]  class 类名{ } 属性:[访问控制符]  数据类型  变量名; 方法:[访问控制符]  void|返...
  • zhangyufeng0126
  • zhangyufeng0126
  • 2016年05月29日 16:08
  • 1172

小程序自学笔记(零基础学小程序汇总)---史上最全的微信小程序学习笔记,笔记看我你也就学会小程序了

小程序自学笔记(零基础学小程序汇总)---史上最全的微信小程序学习笔记,笔记看我你也就学会小程序了...
  • qiushi_1990
  • qiushi_1990
  • 2016年11月28日 18:43
  • 3728

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

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

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

1、基类ASShape //.h #import @interface ASShape : NSObject -(void) draw; @end //.m #import "ASShape.h"...
  • yuxikuo_1
  • yuxikuo_1
  • 2014年12月23日 14:14
  • 603

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

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

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

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

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

创建新对象有两个方法:第一种方法就是[类名 new] ,第二种方法是[[类名 alloc ] init ],这两种方法时等价的。 在Cocoa里面常用的则是alloc和init方法。 alloc实...
  • lutaotony
  • lutaotony
  • 2011年09月19日 22:59
  • 2702

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

一,类的声明 类的声明包括两部分,声明部分及实现部分,下面以Person类的声明为例: 1     Person.h:   .h文件中主要是对类的声明(包括实例变量及方法等) #impo...
  • wu_shu_jun
  • wu_shu_jun
  • 2013年03月17日 20:27
  • 3994

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

1、对象分配 alloc方法,做了两件事:一件是为类分配一块内存,
  • cjfire
  • cjfire
  • 2014年08月30日 12:43
  • 634
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Object-C 学习笔记(九)---面相对象(多态)
举报原因:
原因补充:

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