多态(二十八)

多态

面向对象的三大特征之一。

多态的核心,是“父类指针指向子类对象”。体现多态的特点,是把父类指针作为参数,或者返回值的时候比较明显。

详细来说,就是我把父类指针作为参数,当传参数的时候,可以把这个父类下的任意子类当作参数传进来。或者我把父类指针当作返回值类型的时候,可以return这个父类下的任意子类。

也就是创建子类对象,然后将这个对象当作参数传出去或者返回值return。

就是这样实现多态。

Person.h


#import <Foundation/Foundation.h>

@interface Person : NSObject

- (void)say;

@end

Person.m


#import "Person.h"

@implementation Person

- (void)say{

NSLog(@"我是一个人?、。");

}

@end

Student.h


#import "Person.h"

@interface Student : Person

- (void)study;

@end

Student.m


#import "Student.h"

@implementation Student

- (void)study{

NSLog(@"我再学习,口可口可...");

}

@end

Teacher.h


#import "Person.h"

@interface Teacher : Person

@end

Teacher.m


#import "Teacher.h"

@implementation Teacher

@end

Play.h


#import <Foundation/Foundation.h>

@class Person;

@interface Play : NSObject

- (void)play:(Person *)aPerson;

@end

Play.m


#import "Play.h"

#import "Person.h"

#import "Student.h"

#import "Teacher.h"

@implementation Play

- (void)play:(Person *)aPerson{

//获取类型

[aPerson className];

//要使用子类特性

//要强制转换回来(转换类型)

Teacher *t = aPerson;

NSLog(@"%@",[aPerson className]);

}

@end

main.m


#import <Foundation/Foundation.h>

#import "Person.h"

#import "Student.h"

#import "Teacher.h"

#import "Play.h"

int main(int argc, const char * argv[]) {

@autoreleasepool {

//多态

//父类指针指向子类对象

//一般用在参数 和 返回值

//学生对象被父类指针指向

Person *p1 = [[Student alloc]init];

//        [p1 say];

Student *s1 = [[Student alloc]init];

Teacher *t1 = [[Teacher alloc]init];

Play *play = [[Play alloc]init];

[play play:t1];

//        [p1 study];

}

return 0;

}

时间: 2024-10-11 08:33:12

多态(二十八)的相关文章

【Unity 3D】学习笔记二十八:unity工具类

unity为开发者提供了很多方便开发的工具,他们都是由系统封装的一些功能和方法.比如说:实现时间的time类,获取随机数的Random.Range( )方法等等. 时间类 time类,主要用来获取当前的系统时间. using UnityEngine; using System.Collections; public class Script_04_13 : MonoBehaviour { void OnGUI() { GUILayout.Label("当前游戏时间:" + Time.t

企业搜索引擎开发之连接器connector(二十八)

通常一个SnapshotRepository仓库对象对应一个DocumentSnapshotRepositoryMonitor监视器对象,同时也对应一个快照存储器对象,它们的关联是通过监视器管理对象DocumentSnapshotRepositoryMonitorManagerImpl实现的 DocumentSnapshotRepositoryMonitorManagerImpl类要实现那些行为,先查看其实现接口DocumentSnapshotRepositoryMonitorManager定义

每日算法之二十八:Longest Valid Parentheses

Given a string containing just the characters '(' and ')', find the length of the longest valid (well-formed) parentheses substring. For "(()", the longest valid parentheses substring is "()", which has length = 2. Another example is &

angular学习笔记(二十八)-$http(6)-使用ngResource模块构建RESTful架构

ngResource模块是angular专门为RESTful架构而设计的一个模块,它提供了'$resource'模块,$resource模块是基于$http的一个封装.下面来看看它的详细用法 1.引入angular-resource.min.js文件 2.在模块中依赖ngResourece,在服务中注入$resource var HttpREST = angular.module('HttpREST',['ngResource']); HttpREST.factory('cardResource

Welcome to Swift (苹果官方Swift文档初译与注解二十八)---199~208页(第四章-- 流程控制)

Value Bindings (绑定值) 在switch的case中可以绑定一个或者多个值给case体中的临时常量或者变量,这个成为绑定值. 代码样例: let anotherPoint = (2, 0) switch anotherPoint { case (let x, 0):   println("on the x-axis with an x value of \(x)") case (0, let y):   println("on the y-axis with

Cocos2d-x 3.x 图形学渲染系列二十八

笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,国家专利发明人;已出版书籍:<手把手教你架构3D游戏引擎>电子工业出版社和<Unity3D实战核心技术详解>电子工业出版社等. CSDN视频网址:http://edu.csdn.net/lecturer/144 昨天,刚从丈母娘家回来,继续博客的更新,接着Cocos2d-x 3.x图形学渲染系列二十七继续系列二十八的编写. 接下来读取FBX模型文件信息,首先要做的是把读取的模型信息进行归类并

工作那些事(二十八)项目管理模式:项目型、职能型、矩阵型

在一个项目中,项目经理有多大权利,可以动用哪些资源,取决于项目管理模式,项目管理模式由公司的CTO来决定.简而言之,项目管理有三种模式:项目型.职能型.矩阵型. 下面先看看这三种模式,对项目经理来说都是什么作用. 1项目型 将所有的能兵强将集结在一起,财务部.业务部.IT管理部等的精英们脱离原有的岗位.形成一个正式的部门,并由项目经理领导.这样的优势是项目经理的权利很强.资源充足,所有的项目经理都希望有这样的团队.但是就公司而言,单独团队对公司整体资源的浪费,是显而易见的:对被抽调的个人而言,脱

二十八、Linux下Vim工具常用命令

在linux下做开发,甚至是只做管理维护工作,也少不了Vim的使用.作为一个新手,我也是刚刚接触,本节将我日常使用或收集的Vim常用命令记录下来. 当然,直接在命令行上输入:vimtutor,就可以学习到Vim的所有命令了.Vim很强大,很多牛人在vim里集成很多插件什么的,但这里只介绍基本vim命令 移动命令 h "左 j "下 k "上 l "右 w "光标移动到下一个单词的首字符 a word forward b "光标移动到上一个单词的首

winform学习日志(二十八)----------将汉字转化为拼音,正则表达式和得到汉字的Unicode编码

一:上图,不清楚的看代码注解,很详细了 二:具体代码 窗体代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Text.RegularExpressio

微信小程序把玩(二十八)image组件

原文:微信小程序把玩(二十八)image组件 image组件也是一个程序不可缺少的,可以这样说一个app中image组件随处可以看到,一般 image有两种加载方式第一种是网络图片第二种是本地图片资源,都用src属性去指定. 重点属性: 三种缩放模式 九种剪切方式 wxml <!--3中是缩放模式 scaleToFill 不保持纵横比缩放图片,使图片的宽高完全拉伸至填满image元素 aspectFit 保持纵横比缩放图片,使图片的长边能完全显示出来.也就是说,可以完整地将图片显示出来. asp