Chapter 7 : 继承

1. 首先记住:Objective-C不支持多继承。 

2. 关于Square类继承于Rectangle类的继承示例:

Rectangle.h
 1 // Rectangle类声明
 2 // Rectangle.h文件
 3 
 4 #import <Foundation/Foundation.h>
 5 
 6 // Inherited from NSObject Class
 7 @interface Rectangle : NSObject
 8 {
 9     int width;
10     int height;
11 }
12 
13 // 存取器属性
14 @property int width;
15 @property int height;
16 
17 - (int)area;
18 - (int)perimemter;
19 
20 @end
Rectangle.m
 1 // Rectangle类定义
 2 // Rectangle.m文件
 3 
 4 #import "Rectangle.h"
 5 
 6 @implementation Rectangle
 7 
 8 @synthesize width;
 9 @synthesize height;
10 
11 - (int)area
12 {
13     return width * height;
14 }
15 
16 - (int)perimeter
17 {
18     return (width + height) * 2;
19 }
20 
21 @end
Square.h
Square.m
 1 // Square类定义
 2 // Square.m文件
 3 
 4 #import "Square.h"
 5 
 6 @implementation Square
 7 
 8 - (void)setSide:(int)s
 9 {
10     // self指令在自身类中查找setWidth:和setHeight:方法,查找不到,则调用父类中的该方法
11     [self setWidth:s];
12     [self setHeight:s];
13 }
14 
15 - (int)side
16 {
17     return width;
18 }
19 
20 @end

 

3. @class指令:

Rectangle类只存储矩形大小。 现在添加原点(x, y)的概念。现定义一个名为XYPoint的类,示例如下:

XYPoint.h
 1 // XYPoint类声明
 2 // XYPoint.h
 3 
 4 #import <Foundation/Foundation.h>
 5 
 6 @interface XYPoint : NSObject
 7 {
 8     int x;
 9     int y; 
10 }
11 
12 // 存取器属性
13 @property int x;
14 @property int y;
15 
16 - (void)setX:(int)xVal andY:(int)yVal;
17 
18 @end
XYPoint.m
 1 // XYPoint类定义
 2 // XYPoint.m文件
 3 
 4 #import "XYPoint.h"
 5 
 6 @implementation XYPoint
 7 
 8 @synthesize x;
 9 @synthesize y;
10 
11 - (void)setX:(int)xVal andY:(int)yVal
12 {
13     x = xVal;
14     y = yVal;
15 }
16 
17 @end

 

@class使用示例如下:

Rectangle.h

PS : 使用@class指令可以提高效率,编译器不需要处理整个XYPoint.h文件,只需要知道XYPoint是一个类名,但是如果需要引用XYPoint类中的方法时,

@class指令是不够的,所以一般情况下还得在@implementation - @end里加入#import "XYPoint.h"

posted on 2012-09-28 10:46  BankFish  阅读(245)  评论(0编辑  收藏  举报