OC 方法,继承,特殊方法
方法结构:
- / + (返回值类型)方法名;
- 号方法:使用对象调用 称为实例方法
+号方法:使用类调用 称为类方法
方法名判断:
1.去掉- / +
2.去掉返回值类型
3.去掉参数类型和参数名
4.去掉分号
剩下的所有的内容是方法名;
面向对象三大特征:封装,继承,多态;
//记录
.h
//方法的结构
//- 或者 + (返回值)方法名;
- (void)study;
+ (void) sleep;
//-号方法: 使用对象调用 称为实例方法
//+号方法: 使用类调用 称为类方法
//1.带返回值的方法
- (NSString *)getName;
//2.带参数的方法
//- 或者 + (返回值类型)方法名:(参数类型)参数名;
- (void)eat:(NSString *)food; //只带一个参数
//3.带多个参数
//- 或 + (返回值类型)方法名:(参数类型)参数名(空格)方法名:(参数类型)参数名;
- (void)kickAss:(NSString *)name withPeople:(NSString *)name2;
.m
-(返回值类型)方法名
{
//实例方法中,可以使用类的实例变量
}
+(返回值类型)方法名
{
//在类的方法中,不可以使用实例变量
}
//1.只能有一个返回值
//2.返回值类型和返回的值的类型(int)/(NSString *)
- (NSString *)getName
{
return _name;
}
- (int)getAge
{
return _age;
}
- (NSString *)kickAss:(NSString *)name people:(NSString *)name2
{
//方法传入的参数(name,name2)只在方法内部可以使用,在其他方法或者main.m中都不可以调用
//方法名不可以重复
NSLog(@"%@,%@",name,name2);
}
main.m
//-号方法的调用
Student * stu = [[Student alloc] init];
[stu study]; //对象调用
//+号方法的调用
[Student sleep]; //类调用
[stu kickAss:@"啊啊啊" withPeople:@"噢噢噢"]; //多参数
//继承
.h
- (id)initWithName:(NSString *)name sex:(NSString *)sex age:(int)age money:(float)money;
.m
//初始化方法是一个实例方法,返回值为id(代表任何对象类型),方法名以init开头 只在初始化的时候调用一次
- (id)init //id:代表任何对象
{
//利用super关键字 调用父类的init方法 作用:用于初始化从父类继承过来的实例变量
//利用self(代表自己类的一个对象) 接受super初始化好的对象
self = [super init]; //self代表当前类的一个对象
//如果上面初始化不成功,self就为nil(空)
if (self) {
//如果成功,在判断体中初始化自己的实例变量
_name = @"龙龙君";
_sex = @"公";
_age = 22;
_money = 100;
}
//返回初始化好的对象.
return self;
}
main.m
Abc * abc = [[Abc alloc]initWithName:@"安" sex:@"女" age:10 money:100];
子类.h
@interface 子类名 : 父类名 //确定继承关系
//继承: 子类会继承父类所有的 实例变量 和 方法
//子类可以重写父类的方法
//可以在子类重写的方法中,调用父类的方法
子类.m
- (返回值类型)方法名
{
[super 方法名]; //调用父类的方法刷卡 super关键字只有一个作用,用于子类中调用父类的方法
}
//对父类的方法进行重写
//子类的方法优先级最高
子类main.m
Abc2 * abc2 = [[Abc2 alloc] init];
abc2->_name = @"呵呵";
[子类名 方法名];
//作业
打僵尸。需求:
定义普通僵尸类:实例变量:僵尸种类、僵尸总血量、僵尸每次失血量。方法:初始化、被打击失血、死亡。
定义路障僵尸类:实例变量:僵尸种类、僵尸总血量、僵尸每次失血量,道具,弱点。方法:初始化、被打击失血、失去装备、死亡。
定义铁桶僵尸类:实例变量:僵尸种类、僵尸总血量、僵尸每次失血量,道具,弱点。方法:初始化、被打击失血、失去装备、死亡。
For循环 模拟***,创建3个僵尸对象。
(1)、普通僵尸。总血量50,每次失血3.
(2)、路障僵尸。总血量80,有路障时,每次失血2,血量剩余一半时,失去路障,每次失血3.
(3)、铁桶僵尸。总血量120,有铁桶时,每次失血1,血量剩余1/3时,失去铁桶,每次失血3.
循环***过程中:每个僵尸被***时,输出本次丢失血量,剩余血量。丢失道具时,输出丢失的道具。僵尸死亡时,输出已死亡。
最后一个僵尸死亡时,***停止,循环结束。输出总***次数。
main.m
#import "Zombie.h"
#import "Luzhang.h"
#import "Tietong.h"
int main(int argc, const char * argv[])
{
Zombie * zombie = [[Zombie alloc] initWithKind:@"普通僵尸" hp:50 lostHp:3];
while (zombie->_currentHp > 0) {
[zombie lostHpMethod];
}
Luzhang * luzhang = [[Luzhang alloc] initWithKind:@"路障僵尸" hp:80 lostHp:2
equipment:@"路障盔甲" weakness:@"丢帽子"];
while (luzhang->_currentHp > 0) {
[luzhang lostHpMethod];
}
Tietong * tietong =[[Tietong alloc]initWithKind:@"铁桶僵尸" hp:120 lostHp:1 equipment:@"桶子" weakness:@"小招"];
while (tietong->_currentHp > 0) {
[tietong lostHpMethod];
}
return 0;
}
Zombie.h
@interface Zombie : NSObject
{
@public
NSString * _kind; //种类
int _hp;
int _losthp;
int _currentHp; //当前剩余的血量
}
- (id)initWithKind:(NSString *)kind hp:(int)hp lostHp:(int)lostHp;
- (void) lostHpMethod; //被打击失血
- (void) dead; //死亡
@end
Zombie.m
@implementation Zombie
- (id)initWithKind:(NSString *)kind hp:(int)hp lostHp:(int)lostHp
{
self = [super init];
if (self) {
_kind = kind;
_hp = hp;
_losthp = lostHp;
_currentHp = _hp;
}
return self;
}
- (void) lostHpMethod //被打击失血
{
_currentHp -= _losthp; //当前剩余血量 = 当前剩余血量 - 失血量
if (_currentHp <= 0) {
_currentHp = 0;
NSLog(@"打掉%d血,还有%d血",_losthp,_currentHp);
[self dead]; //self用来调用自己类中的其它方法
}
else
{
//如果没死,输出血量
NSLog(@"打掉%d血,还有%d血",_losthp,_currentHp);
}
}
- (void) dead
{
NSLog(@"%@GAME OVER",_kind);
}
@end
Luzhang.h
#import "Zombie.h"
@interface Luzhang : Zombie
{
NSString * _equipment; //道具
NSString * _weakness; //弱点
}
- (id)initWithKind:(NSString *)kind hp:(int)hp
lostHp:(int)lostHp equipment:(NSString *)equipment weakness:(NSString *)weakness;
- (void)lostEquipment;
@end
Luzhang.m
#import "Luzhang.h"
@implementation Luzhang
- (id)initWithKind:(NSString *)kind hp:(int)hp
lostHp:(int)lostHp equipment:(NSString *)equipment weakness:(NSString *)weakness
{
self = [super initWithKind:kind hp:hp lostHp:lostHp];
if (self) {
_equipment = equipment;
_weakness = weakness;
}
return self;
}
- (void)lostEquipment
{
_losthp = 3;//装备丢失,每次掉血量增加
NSLog(@"%@的%@丢了",_kind,_equipment);
_equipment = nil;//把装备扔掉
}
//重写掉血的方法
- (void)lostHpMethod
{
if (_equipment != nil && _currentHp <= _hp/2 ) {
[self lostEquipment];
}
[super lostHpMethod];
}
@end
//需求和方法和路障僵尸一样,所以直接在main.m调用即可
Tietong.h
Tietong.m
转载于:https://blog.51cto.com/ghost0714/1382842
OC 方法,继承,特殊方法相关推荐
- OC中的内省方法初探
内省(Introspection)是对象揭示自己作为一个运行时对象的详细信息的一种能力.NSObject协议和类定义了很多内省方法,用于查询运行时信息,以便根据对象的特征进行识别. 在iOS开发过程中 ...
- Java面向对象之继承,方法重写,super关键字,员工类系列继承题
在程序中,如果想声明一个类继承另一个类,需要使用extends关键字. 格式: class 子类 extends 父类 {} 继承的好处 1.继承的出现提高了代码的复用性,提高软件开发效率. 2.继承 ...
- Java:继承之super关键字,继承之私有权限,继承之方法重写,继承之object类,继承之简单工厂模式
一.继承的概念及用法 继承背后的思想就是 基于已存在的类来构建新类 当从已存在类继承时,就重用了它的方法和属性,还可以添加新的方法和属性来定制新类以应对需求 ...
- python继承编程教程_Python实现通过继承覆盖方法示例
本文实例讲述了Python实现通过继承覆盖方法.分享给大家供大家参考,具体如下: Python真是太动态了,所有的方法默认都是虚的.子类定义父类同名函数之后,父类函数被覆盖. class P(obje ...
- 阶段1 语言基础+高级_1-3-Java语言高级_02-继承与多态_第1节 继承_7_继承中方法的覆盖重写_注意事项...
创建一个父类 创建一个子类,并继承这个父类 父类总定义一个方法叫做method 子类中要想进行覆盖重写,也定义为相同的名称. 名称相同,参数列表相同.这种情况下就是发生了重写 子类的方法名称改成met ...
- python类方法继承_对python中类的继承与方法重写介绍
1.单继承 父类也叫基类 子类也叫派生类 如下所示,继承的关系: 继承的书写格式: class 子类(父类): 方法 实例: class Animal: def eat(self): print(&q ...
- 传智播客python笔记_python传智播客笔记--第十天:隐藏属性,私有属性,私有方法,__del__方法,类的继承,类中方法的重写...
封装,继承,多态 隐藏属性,私有属性,私有方法,__del__方法,类的继承,类中方法的重写 -**************************************************** ...
- 27、Python 面向对象(创建类、创建实例对象、访问属性、内置类属性、对象销毁、类的继承、方法重写、基础重载方法、运算符重载、类属性与方法、下划线双下划线)
27Python面向对象(Python2) Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的.本章节我们将详细介绍Python的面向对象编程. ...
- python面向对象-4类的继承与方法的重载
1.类的继承与方法的重载 上面就是先定义了一个类A,然后由定义了一个类B,B继承了类A,这样B就有了A的非私有属性和方法. 1 class Washer: 2 company='ZBL' 3 def ...
最新文章
- 一文讲解机器学习算法中的共线性问题
- golang image.image 转文件流_Kuiper 1.0.2 正式发布 超轻量 IoT 边缘流处理
- angularjs---服务(service / factory / provider)
- 非聚集索引和聚集索引
- css3动画应用-音乐唱片旋转播放特效
- ABAP help click F1
- oracle为什么要创建数据库,手动创建Oracle数据库之前因后果
- 项目不能使用fn标签_无服务器,Java和FN项目的第一步
- day18-基于DjangoORM的外键实现增加用户(含select标签)
- 技术选择真的没有那么重要
- 蓝桥杯java 最短路_Java实现蓝桥杯 最短路
- ASP.NET2.0一次发送多封邮件
- MyBatis源码阅读(八) --- Executor执行器
- ENVI实验教程(2)遥感图像预处理—辐射校正
- 手机+文件共享服务器软件,windows文件共享服务器软件
- python为什么会出现无响应怎么办,Python多处理中无响应进程的终止
- 北京邮电计算机相关知识,2019北京邮电大学计算机专业考研经验分享
- 面向对象的设计原则(SOLID)
- 电动汽车换电池要多少钱?各品牌电池更换费用大起底!
- Ubuntu 扩大/home磁盘分区
热门文章
- MeEdu - 开源在线教育点播系统。
- Typecho webstack开源导航主题
- Mybatis-Plus查询中排除标识字段
- Microsoft Enterprise Library 5.0 系列(二) Cryptography Application Block (初级)
- Bootstrap 3: 菜单居中 Center content in responsive bootstrap navbar
- [秘技]解决QQ音乐超出服务区域问题
- 流量劫持能有多大危害?
- php 添加水印, 格式转换, 变换大小 Watermark, png2jpg, resize
- 动态规划——最大子矩阵(hdu1081)
- 【python】set集合基础与使用