深入浅出Objective-Cノート(五)
3258 ワード
クラスの継承
円形クラス
@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
長方形クラス
@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
円形クラスと矩形クラスを比較すると,重複する部分が多いことが分かった.
**継承はクラス間の類似性を反映します**
シェイプクラス
@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
クラスBがクラスAを継承している場合、BはAのすべての属性とメソッドを含む.
円形クラスと矩形クラスが形状クラスを継承している場合は、多くの属性と方法をもう一度書く必要はありません.
@interface Circle : Shape
{
double radius;
}
- (void)setRadius:(double)r;
@end
Circle Shape , , 。
@interface Rectangle : Shape
{
double width;
double height;
}
- (void)setWidth:(double)w;
- (void)setHeight:(double)h;
@end
, 。
@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
サブクラスCircleクラス
@interface Circle : Shape {
double radius;
}
- (void)setRadius:(double)r;
@end
@implementation Circle {
- (id)init {
self = [super init];// , Shape , super Shape
if (self) {
radius = 0.0;// Circle
}
return self;
}
- (void)setRadius:(double)r {
radius = r;
}
@end
サブクラスRectangleクラス
@interface Rectangle : Shape {
double width;
double height;
}
- (void)setWidth:(double)w;
- (void)setHeight:(double)h;
@end
@implementation Rectangle {
- (id) init {
self = [super init];// !
if (self) {
width = 0.0;
height = 0.0;
}
return self;
}
- (void)setWidth:(double)w {
width = w;
}
- (void)setHeight:(double)h {
height = h;
}
@end