//
// Cat.h
// OC3-父类指针指向子类对象
//
// Created by qianfeng on 15/6/17.
// Copyright (c) 2015年 qianfeng. All rights reserved.
// #import "Animal.h" @interface Cat : Animal
{
float _height;
}
@property (assign,nonatomic)float height;
@end //
// Cat.m
// OC3-父类指针指向子类对象
//
// Created by qianfeng on 15/6/17.
// Copyright (c) 2015年 qianfeng. All rights reserved.
// #import "Cat.h" @implementation Cat
-(void)printAnimalFood
{
NSLog(@"cat like to eat fish");
}
-(NSString *)description
{
return [NSString stringWithFormat:@"name=%@,age=%li,height=%.2f",_name,_age,_height];
}
@end
//
// Dog.h
// OC3-父类指针指向子类对象
//
// Created by qianfeng on 15/6/17.
// Copyright (c) 2015年 qianfeng. All rights reserved.
// #import "Animal.h" @interface Dog : Animal
{
float _weight;
}
-(void)printAnimalHaHa;
@property (assign,nonatomic) float weight;
@end //
// Dog.m
// OC3-父类指针指向子类对象
//
// Created by qianfeng on 15/6/17.
// Copyright (c) 2015年 qianfeng. All rights reserved.
// #import "Dog.h" @implementation Dog
-(void)printAnimalFood
{
NSLog(@"dog like to eat bone");
}
//-(NSString *)description
//{
// return [NSString stringWithFormat:@"name=%@,age=%li,weight=%.2f",_name,_age,_weight];
//} -(void)printAnimalHaHa
{
NSLog(@"HaHa");
}
@end
//
// Animal.h
// OC3-父类指针指向子类对象
//
// Created by qianfeng on 15/6/17.
// Copyright (c) 2015年 qianfeng. All rights reserved.
// #import <Foundation/Foundation.h> @interface Animal : NSObject {
NSString *_name;
NSInteger _age;
}
@property (copy,nonatomic)NSString *name;
@property(assign,nonatomic)NSInteger age;
-(void)printAnimalFood;
@end //
// Animal.m
// OC3-父类指针指向子类对象
//
// Created by qianfeng on 15/6/17.
// Copyright (c) 2015年 qianfeng. All rights reserved.
// #import "Animal.h" @implementation Animal
-(void)printAnimalFood
{
NSLog(@"-----Animal");
}
-(NSString *)description
{
return [NSString stringWithFormat:@"name111=%@,age=%li",[self name],self.age];
}
@end
//
// main.m
// OC3-父类指针指向子类对象
//
// Created by qianfeng on 15/6/17.
// Copyright (c) 2015年 qianfeng. All rights reserved.
// #import <Foundation/Foundation.h>
#import "Dog.h"
#import "Cat.h"
#import "Animal.h" void showAnimalFood(Animal *ani)
{
[ani printAnimalFood];
}
int main(int argc, const char * argv[]) {
@autoreleasepool { Dog *xiaohei =[[Dog alloc] init];
xiaohei.name=@"xiaogei";
xiaohei.age=;
xiaohei.weight=12.6; //[xiaohei description];
NSLog(@"%@",xiaohei); Cat *xiaomao =[[Cat alloc] init];
xiaomao.name=@"xiaomao";
xiaomao.age=;
xiaomao.height=12.6;
//[xiaohei description];
NSLog(@"%@",xiaomao);
//父类的对象指针可以指向子类的对象
//调用的方法看具体的对象类型,先从子类查找对应的方法实现,如果子类没有实现对应的方法,跳到父类查找对应的方法实现,如果父类没有实现对应的方法,再跳到父类的父类查找对应的方法实现.
Animal *ani =xiaohei;
[ani printAnimalFood]; ani=xiaomao;
[ani printAnimalFood]; showAnimalFood(xiaomao);
showAnimalFood(xiaohei);
//根据传入的不同的对象,做出不同的响应.多态 }
return ;
}

OC3-父类指针指向子类对象的更多相关文章

  1. C++析构函数的自动调用(用于父类指针指向子类对象,内存泄漏问题)

    class A {public:A() { printf("A \n"); }~A() { printf(" ~A \n"); } // 这里不管写不写virt ...

  2. 20140408 父类指针指向子类对象 ;delete ;static作用

    1.父类指针可以指向子类对象 静态联翩:如果以父类指针指向派生类对象,那么经由该指针只能访问父类定义的函数 动态联编:根据指针实际指向的对象类型确定 2.面试宝典 P110 面试题5  #includ ...

  3. C#多态;父类引用指向子类对象;new和override的区别;new、abstract、virtual、override,sealed关键字区别和使用代码示例;c#类的初始化顺序

    关于父类引用指向子类对象 例如: 有以下2个类 public class Father { public int age = 70; public static string name = " ...

  4. 父类指针指向子类内存,为什么当父类的成员函数不加virtual时,访问的还是父类的成员函数,而不是子类同名的成员函数

    我认为是这样,类的成员函数都在代码区,不同的类的成员函数在代码区有自己的类名称空间限制,类的虚函数在虚函数表中,程序执行的时候,是先在虚函数表中找该成员函数,如果没有找到,就去该类在代码区的成员函数中 ...

  5. Java多态 父类引用指向子类对象

    Java多态的三个必要条件: 1. 继承 2. 子类重写父类方法 3. 父类引用指向子类对象 然后看一个例子 输出结果为: 给出结论:Father  c  =  new  Child()    在c的 ...

  6. java多态性,父类引用指向子类对象

    父类引用指向子类对象指的是: 例如父类Animal,子类Cat,Dog.其中Animal可以是类也可以是接口,Cat和Dog是继承或实现Animal的子类. Animal animal = new C ...

  7. java-多态中成员访问特点-父类引用指向子类对象

    多态前提: - 要有继承关系. - 要有方法重写. - 要有父类引用指向子类对象. 1.成员变量:编译看左边(父类),运行看左边(父类) 2.成员方法:编译看左边(父类),运行看右边(子类),动态绑定 ...

  8. java 父类引用指向子类对象---动态绑定

    知识点: 1.java 中父类引用指向子类对象时动态绑定针对的只是子类重写的成员方法: 2.父类引用指向子类对象时,子类如果重写了父类的可重写方法(非private.非 final 方法),那么这个对 ...

  9. Java多态-如何理解父类引用指向子类对象

    java多态,如何理解父类引用指向子类对象 要理解多态性,首先要知道什么是“向上转型”. 我定义了一个子类Cat,它继承了Animal类,那么后者就是前者是父类.我可以通过   Cat c = new ...

随机推荐

  1. 让EditText不能自动获取焦点

    在activity中放置了1个或1个以上的EditText,进入该activity的时候第一个EditText会接收焦点,我希望里面所有的EditText默认是不接收焦点的,该怎么做呢? 方法: 在第 ...

  2. 创建动态组-以OU为单位

    选择“Windows 计算机”为对象,因为监视对象是以计算机为单位 ==================== 以下方式则无组成员返回: 此时要求返回的对象为AD用户或组,猜测SCOM没有监视到该用户或 ...

  3. 网络编程中常见地址结构与转换(IPv4/IPv6)

    1. sockaddr/sockaddr_in/in_addr (IPv4).sockaddr6_in/in6_addr/addrinfo (IPv6) struct sockaddr { unsig ...

  4. VS DLL 复制本地

    1.引用一个DLL,需要指定路径,复制本地的意思是 把这个DLL复制到exe的Debug目录(调试的时候). 2.复制到本地的动作是在生成的时候执行的,清理的时候会删除. 3.从外部引用一个DLL,不 ...

  5. delphi 使用进度条查看浏览器状态

    使用进度条查看浏览器状态     procedure TForm1.WebBrowser1ProgressChange(ASender: TObject; Progress,  ProgressMax ...

  6. Android无法生成R文件的终极解决办法

    R文件如果在clean项目(Project—>Clean)和 Fix Project Properties(如下图):   如果在第一步无法解决的的时候,那可能原因就是资源文件调用的错误,比如资 ...

  7. 个人对maven pom.xml文件的理解

    如:一个项目可能需要引用另外两个项目的类.. 如 项目cswebbefore  需要引用cswebservice 和reports 这三个项目都有各自的pom.xml文件 cswebservice 项 ...

  8. 【javaSE】HashSet和HashMap

    ************************************************************************   ****原文:blog.csdn.net/clar ...

  9. 数据恢复软件使用经验-支持U盘,手机SD卡,硬盘数据,解决图片恢复后打不开的问题

    数据恢复软件使用经验-支持U盘,手机SD卡,硬盘数据.解决图片恢复后打不开的问题. 用过非常多数据恢复软件.最早EasyRecovery pro.恢复过U盘.手机SD卡,硬盘数据.但如今下载不了最新版 ...

  10. android153 笔记 5

    52. Linux中跨进程通信的几种方式 . linux编程全部是基于文件管理的. # 管道( pipe ):管道也是一个文件,一个进程负责读一个进程负责写,管道是一种半双工(2边可以通信但是不能是同 ...