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"