`
supermind
  • 浏览: 13757 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
社区版块
存档分类
最新评论

Object-C学习(三)

 
阅读更多
引用:http://blog.csdn.net/huanglx1984/article/details/4296276

我们接着来看objective c中面向对象的特性。要谈到面向对象,就不可能不说继承和多态。
其实,我们之前就已经谈到了继承,因为在objective c中,所有类都是从NSObject继承而来的。
继承,可以理解为“is-a”的关系,这个概念相信对大部分人来说都在熟悉不过了,关于C++和Java的任何一本书都会详细介绍这个概念,这里我不再赘述,直接上例子。

// Rectangle.h
#import <Foundation/NSObject.h>
@interface Rectangle:NSObject {
    int width, height;
}
- (Rectangle*) initWithWidth:(int)w andHeight:(int)h;
- (void) setWidth: (int)w;
- (void) setHeight: (int)h;
- (void) setWidth: (int)w andHeight:(int)h;
- (int) width;
- (int) height;
- (void) print;  // printf("width is %i, height is %i/n", [self width], [self height]);
@end

- (Rectangle*) initWithWidth:(int)w andHeight:(int)h 和- (void) setWidth: (int)w andHeight:(int)h  都是带多个参数的函数声明(参见第一篇)。

我们再实现一个正方形的类,继承矩形。
// Square.h
#import "Rectangle.h"
@interface Square:Rectangle {
}
- (Square*) initWithSize: (int)s;
- (void) setSize: (int)s;
- (int) size;
@end
// Square.m
@implementation Square
- (Square*) initWithSize: (int)s {
    if( self = [super init] ) {
       [self setSize:s];
   }
   return self;
}
- (void) setSize: (int)s {
    width = s;
    height = s;
}
- (int) size {
    return width;
}
- (void) setWidth: (int)w {
    [self setSize:w];
}
- (void) setHeight: (int)h {
    [self setSize:h];
}
- (void) print {
   printf( "the size is %i/n", [self size] );
}
@end
上面这个正方形类,继承了矩形类的成员变量。但是由于正方形的几何特殊性(长=宽),所以在正方形类中添加了三个方法。
分别是initWithSize,setSize,size 。另外,我们重载了矩形类中的setWidth 和setHeight 方法,因为正方形不允许分别设置长和宽。
如何使用:
int main( int argc, char* argv[] ) {
    Rectangle* rect = [[Rectangle alloc] initWithWidth:10 andHeight:5];
    Square* sq = [[Square alloc] initWithSize:10];
    [rect print];
    [sq print];
    [rect release];
    [sq release];
}




有了继承,我们就来说一说多态性。C++中虚函数的概念相信大家都不陌生,它通过一个虚拟表(virtual table)实现了动态绑定(dynamic binding)。
在objective c中也有类似的概念。
我们就以上面两个类为例子:
int main ( int argc, char* argv[] ) {
    Rectangle *rect = [[Rectangle alloc] initWithWidth:10 andHeight:5];
    Square *sq = [[Square alloc] initWithSize: 5];
    id shape;
   
    shape = rect;
    [shape print];   // call the Rectangle's print

    shape = sq;
    [shape print];   // call the Square's print

    ... ...
}
这里,引入了objective c的一个很重要的关键词 id 。
我们可以将id理解为C++中的void*,所以我们能将rect和sq都赋值给shape。
那么shape是怎么知道调用哪个版本的print的呢?
还记得第一篇中我们提到的message的概念么?虽然id不知道如何响应print,但是它可以把这个消息传递给rect或者sq。



和c++与Java一样,objective c也支持run-time的类类型检查
- (BOOL) isKindOfClass: classObj
用于判断该对象是否属于某个类或者它的子类。

// true


如: if( [sq isKindOfClass: [Rectangle class]] == YES ) {}

- (BOOL) isMemberOfClass: classObj
用于判断该对象是否属于某个类(这里不包括子类)

// true


如: if( [sq isMemberOfClass: [Rectangle class]] == NO ) {}

- (BOOL) respondsToSelector: selector
用于判断该对象是否能响应某个消息。这里,我们可以将@selector后面带的参数理解为C++中的函数指针。
注意:1)不要忘了@ 2)@selector后面用的是(),而不是[]。3)要在消息名称后面跟:,无论这个消息是否带参数。

// true

如: if( [sq respondsToSelector: @selector(setSize:)] == YES ) {}

+ (BOOL) instancesRespondToSelector: selector
用于判断该类是否能响应某个消息。这是一个静态函数。

// true

如: if( [Square instancesRespondToSelector: @selector(setSize:)] == YES ) {}

分享到:
评论

相关推荐

    基于Object-C语言实现列表选择(项目源码).rar

    Object-C语言基础: 学习Object-C语言的基本语法和特性,了解Objective-C编程范式和iOS开发规范。 列表选择功能实现: 掌握实现iOS应用中列表选择功能的方法和技巧,包括列表的展示、数据的加载和选择状态的管理等...

    Object-C语言教程&案例&相关项目资源

    这篇文章为您呈现了一份详尽的Object-C语言学习资源概览,旨在帮助初学者和经验丰富的开发者系统地学习Object-C编程,并通过实践案例和项目资源提升实际编程能力。 文章首先聚焦于Object-C语言教程,这是学习Object...

    object-c学习路线

    学object-c的路线,可以借鉴一下,有个大体方向才是最好的学习方法

    Object-C 学习文档pdf

    该压缩文档包括了Object-C学习的两大经典书籍,《Object-C程序设计》、《Object-C基础教程》。建议先学习第一本书,然后学习第二本书。如果有c/c++的基础,学起来会非常快的。由于本人没什么下载积分,就厚着脸向...

    object-c学习

    对于初学者是一个好的文档,在你两个小时的时间里就可以对语法有个组基本的了解。

    Object-Cios苹果app开发入门object-c例子demo14个实例 一般编程问题

    ios苹果app开发入门,object-c,例子,demo,14个实例 初学者难得的学习实例 【实例截图】 【核心代码】 归档 ├── AirPrinter │ ├── AirPrinter │ │ ├── AirPrinter-Info.plist │ │ ├── AirPrinter...

    Object-c初学者文档

    Object-c初学者文档,学完就可以开发ios了!完全没压力

    object-c 解析显示 MS PPT

    object -c 解析 MS PPT 希望给大家一个学习思路。

    Object-C-关于Object-C的学习介绍了解

    Object-C

    Object-C的学习资料及14个Demo

    适用于Object-C初学者,里面有初学者相关的资料及相关的源码

    2024年Object-C快速入门.zip

    从Object-C的介绍和特点开始,逐步介绍了如何学习Object-C、Object-C的实际应用场景,以及Object-C的高级特性,如内存管理、多线程编程、设计模式和现代实践。此外,博客还提供了学习资源和进阶建议,并强调了加入...

    Object-C 学习笔记

    Object-C 学习笔记 自己整理的 适合初学者

    Object-C Programming

    Object-C Programming 前面7章的学习笔记,如果觉得好可以下载原本进行学习

    Object-C的教程.txt

    以下是一个简要的Object-C教程框架,帮助你了解学习Object-C所需的基本步骤和内容: 一、Object-C基础语法 变量与数据类型:了解Object-C中的变量声明和数据类型,包括基本数据类型(如int、float等)和对象类型...

    Learning iOS Programming 3rd Edition-- object-c 和 xcode4的学习文档

    学习iOS,最直接的方式就是买一台macBook pro,然后下载xcode,再挑选一本合适自己的ios入门书籍,object-c的学习过程中,第一要接触的ide还是xcode,或许网上有许多介绍xcode的资料,也有许多object-c学习的书籍,...

    object-c学习笔记

    本人是刚刚开始接触到OBJECT-C ,这是我在第一次学习object-C 是的学习笔记,请大家分享,赐教

    Object-C学习大纲.pdf

    Object-C学习大纲

    object-c学习教程PPT

    objectcC学习资料汇总,PPT素材,基础教程,Xcode学习

    TomCat By Object-C.zip

    如果您习惯了Object-C的语法,学习一个新的工程或者学习第三方的代码是很容易的。 如果您对这种方括号的语法规则还是不适应,不要担心。阅读完本教程您将会熟悉他们。 Frameworks 像其他的语言一样,Object-C语言...

    Mpush Client Object-C.zip

    如果您习惯了Object-C的语法,学习一个新的工程或者学习第三方的代码是很容易的。 如果您对这种方括号的语法规则还是不适应,不要担心。阅读完本教程您将会熟悉他们。 Frameworks 像其他的语言一样,Object-C语言...

Global site tag (gtag.js) - Google Analytics