類(lèi)的繼承
- 繼承反映的是類(lèi)之間的相似性
圓形類(lèi)
@interface Circle : NSObject
{
double x;
double y;
CGColorRef lineColor;
CGColorRef fillColor;
double radius;
}
- (void)moveToX:(double)x Y:(double)y;
- (void)setLineColor:(CGColorRef)lineColor;
- (void)setFillColor:(CGColorRef)fillColor;
- (void)setRadius:(double)r;
@end
矩形類(lèi)
@interface Rectangle : NSObject
{
double x;
double y;
CGColorRef lineColor;
CGColorRef fillColor;
double width;
double height;
}
- (void)moveToX:(double)x andY:(double)y;
- (void)setLineColor:(CGColorRef)lineColor;
- (void)setFillColor:(CGColorRef)fillColor;
- (void)setWidth:(double)w;
- (void)setHeight:(double)h;
@end
對(duì)比圓形類(lèi)跟矩形類(lèi),發(fā)現(xiàn)有很多重復(fù)的部分。
** 繼承反映的是類(lèi)之間的相似性 **
形狀類(lèi)
@interface Shape : NSObject
{
double x;
double y;
CGColorRef lineColor;
CGColorRef fillColor;
}
- (void)moveToX:(double)x andY:(double)y;
- (void)setLineColor:(CGColorRef)lineColor;
- (void)setFillColor:(CGColorRef)fillColor;
@end
- 什么是繼承?
如果類(lèi)B繼承了類(lèi)A,那么B會(huì)包含A的所有屬性和方法。
如果圓形類(lèi)和矩形類(lèi)都繼承了形狀類(lèi),那么很多屬性跟方法就不用再寫(xiě)一遍。
- 使用繼承來(lái)寫(xiě)Circle類(lèi)
@interface Circle : Shape
{
double radius;
}
- (void)setRadius:(double)r;
@end
Circle類(lèi)繼承了Shape類(lèi),代碼精簡(jiǎn)了很多,重復(fù)的部分都不用寫(xiě)了。
- 使用繼承來(lái)寫(xiě)Rectangle類(lèi)
@interface Rectangle : Shape
{
double width;
double height;
}
- (void)setWidth:(double)w;
- (void)setHeight:(double)h;
@end
使用繼承,只要寫(xiě)自己類(lèi)特有的屬性跟方法即可。
基類(lèi)/父類(lèi) ??派生類(lèi)/子類(lèi)
NSObject類(lèi)
ObjC的類(lèi)都繼承NSObject類(lèi)完整實(shí)現(xiàn)一個(gè)例子
父類(lèi)Shape類(lèi)
#import <Foundation/Foundation.h>
@interface Shape : NSObject {
double xCoord;
double yCoord;
CGColorRef lineColor;
CGColorRef fillColor;
}
- (void)moveToX:(double)x andY:(double)y;
- (void)setLineColor:(CGColor)lineColor;
- (void)setFillColor:(CGColor)fillColor;
@end
@implementation Shape
-(id)init {
self = [super init];
if (self) {
xCoord = 0.0;
yCoord = 0.0;
lineColor = NULL;
fillColor = NULL;
}
return self;
}
- (void)moveToX:(double)x andY:(double)y {
xCoord = x;
yCoord = y;
}
- (void)setLineColor:(CGColor)color {
lineColor = color;
}
- (void)setFillColor:(CGColor)color {
fillColor = color;
}
@end
子類(lèi)Circle類(lèi)
@interface Circle : Shape {
double radius;
}
- (void)setRadius:(double)r;
@end
@implementation Circle {
- (id)init {
self = [super init];//注意,因?yàn)槔^承自Shape類(lèi),所以這里的super指的是Shape類(lèi)
if (self) {
radius = 0.0;//只用初始化Circle類(lèi)特有的半徑變量
}
return self;
}
- (void)setRadius:(double)r {
radius = r;
}
@end
子類(lèi)Rectangle類(lèi)
@interface Rectangle : Shape {
double width;
double height;
}
- (void)setWidth:(double)w;
- (void)setHeight:(double)h;
@end
@implementation Rectangle {
- (id) init {
self = [super init];//實(shí)現(xiàn)部分不要忘了第一步是初始化!
if (self) {
width = 0.0;
height = 0.0;
}
return self;
}
- (void)setWidth:(double)w {
width = w;
}
- (void)setHeight:(double)h {
height = h;
}
@end