博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Objective-C基础1:OC中类的继承和组合
阅读量:4672 次
发布时间:2019-06-09

本文共 2553 字,大约阅读时间需要 8 分钟。

1.类的定义和声明

OC中的类声明是以@interface开始@end结束。

OC中的类定义以@implementation开始@end结束。

OC中的方法声明:

- (void) setName : (NSString*) strName;前面的短线-表示这是一个方法,(void)表示返回值, setName表示方法名称,(NSString*) StrName表示参数是NSString*类型,名称是strName,注意:()一定要加

OC中的成员变量定义在类声明的{}中,这一点跟方法声明不一样,方法在{}外

OC中的对象创建方法:Animal* animal = [Animal new]; 表明对Animal类调用new方法分配一块内存创建对象。

OC中的方法调用:[animal setName : @"akon"];表明调用对象animal方法setName,传入参数为akon。

需要注意的是:OC中的方法调用都是以中括号[]括起来的。

编程好习惯:类名以大写字母开头,方法名和变量名字以小写字母开头。

例子:

///声明@interface Animal : NSObject{@privateNSString* strName;}- (void) setName : (NSString*) strName;- (NSString*) getName;@end//定义@implementation Animal- (void) setName : (NSString*) strNameIn{    strName = strNameIn;}- (NSString*) getName{    return strName;}@endint main(int argc, const char * argv[]) {        Animal* animal = [Animal new];    [animal setName : @"akon"];    NSString* strName = [animal getName];    NSLog(@"name:%@", strName);    return 0;}

 

2.类的继承

其实上面例子中的Animal就演示了类的继承Animal类继承于NSObject,为了加深印象,分别创建两个类Cat和Dog继承于父类Animal,代码如下:

@interface Animal : NSObject{@privateNSString* strName;}- (void) setName : (NSString*) strName;- (NSString*) getName;- (NSString*) manCallMe;@end@interface Cat : Animal@end@interface Dog : Animal@end#endif

 上述Animal类定义了一个方法manCallMe,定义这个方法的意图是为了实现类似C++里面的虚函数,C++里面是通过虚函数来实现动态绑定的。

 那么OC是如何实现动态绑定的呢?只要子类覆盖父类的方法即可。代码见下:

////  Animal.m//  TestCons////  Created by mac on 15/1/17.//  Copyright (c) 2015年 akon. All rights reserved.//#import 
#import "Animal.h"@implementation Animal- (void) setName : (NSString*) strNameIn{ strName = strNameIn;}- (NSString*) getName{ return strName;}- (NSString*) manCallMe{ return @"Animal";}@end@implementation Cat- (NSString*) manCallMe{ return @"Cat";}@end@implementation Dog- (NSString*) manCallMe{ return @"Dog";}@end

 在创建对象的时候,以id类型保存对象指针,代码如下:

int main(int argc, const char * argv[]) {        id animal[3];    animal[0] = [Animal new];    [animal[0] setName : @"a"];    animal[1] = [Cat new];    [animal[1] setName : @"b"];    animal[2] = [Dog new];    [animal[2] setName : @"c"];    for (int i = 0; i < 3; ++i) {        NSLog(@"getName:%@, manCallMe:%@", [animal[i] getName], [animal[i] manCallMe]);    }    return 0;}

有的时候子类需要调用父类的方法,如何做,类似于C++__super关键字,OC中有有super关键字,比如在Cat中调用Animal的manCallMe方法,这样干:

[super manCallMe]

 

3.类的组合

继承跟组合是复用类的两种方法,那么什么时候用继承什么时候用组合呢?继承强调的是"是一种"关系,比如猫是动物的一种,够是动物的一种。那么猫和狗就应该继承于动物。组合强调的是''有''的关系,比如动物有腿,有眼睛,那类动物就应该组合腿和眼睛。

组合的实现很简单,就是简单地把方法调用委托给被组合类。比如动物类有个方法'"放电",那么这个方法的实现就可以调用眼睛的放电方法来实现。由于很简单,代码就不上了。

转载于:https://www.cnblogs.com/52xpz/p/4232342.html

你可能感兴趣的文章
MYSQL中的日期转换
查看>>
在线修改Schema
查看>>
【学术篇】SDOI2008 仪仗队
查看>>
5.递归实现,把M元用最少的硬币来凑。不同面值的硬币,有10元,5元,2元,1元。...
查看>>
第6章—渲染web视图—使用Thymeleaf
查看>>
Android动态添加Fragment
查看>>
OGRE粒子系统简介
查看>>
C、C++语言中参数的压栈顺序
查看>>
用jquery实现简单的表单验证
查看>>
自然语言3——官网介绍
查看>>
lucene 搜索学习笔记 - OK
查看>>
Java的垃圾回收
查看>>
java中的与或运算
查看>>
Pycharm连接BitBucket
查看>>
ftp 批量上传文件命令
查看>>
nlog自定义文件名
查看>>
java环境变量配置
查看>>
Mysql中文乱码问题解决
查看>>
make clean指令出现问题
查看>>
巴中故里
查看>>