objective-c繼承
繼承
編寫面向對象的程序的時候,類和對象之間存在一定的關係
處理類和對象之間的關係的時候,尤其需要注意OOP的兩個方面:
一個就是繼承,創建一個新類的時候,通常需要定義新類以區別於
其他類和現有類,使用繼承可以定義一個具有父類所有功能的新類。
現在有兩個類:
圓:
@interface Circle:NSObject
{
ShapeColor fillColor;
ShapeRect Bounds;
}
-(void) setFillColor:(ShapeColor) fillColor;
-(void) setBounds:(ShapeRect) bounds;
-(void) draw;
@end
矩形:
@interface Rectangle:NSObject
{
ShapeColor fillColor;
ShapeRect Bounds;
}
-(void) setFillColor:(ShapeColor) fillColor;
-(void) setBounds:(ShapeRect) bounds;
-(void) draw;
@end
這兩個接口非常相似(相當的相似啊),除了類名不一樣,其他的都一樣
其中
setFillColor和 setBounds這兩個方法也一樣
我們可以創建一個全新的類
叫做 shape
@interface shape:NSObject
{
ShapeColor fillColor;
ShapeRect bounds;
}
-(void) setFillColor:(ShapeColor) fillColor;
-(void) setBounds:(ShapeRect) bounds;
-(void) draw
@end //shape
然後我們的Circle和Rectangle就可以繼承shape這個類了
@interface Circle:shape
@end //Circle
@interface RectAngle:shape
@end //shape
接着上面的繼承:有一些語言有多繼承性(比如C++),就是一個類可以從
兩個或者多個類中繼承而來。Objective-C不支持多繼承。
回顧上一次的shape類 我們定義它爲Circle Rectangle類的父類
@interface shape:NSObject
{
ShapeColor fillColor;
ShapeRect bounds;
}
-(void) setFillColor:(ShapeColor) fillColor;
-(void) setBounds:(ShapeRect) bounds;
-(void) draw;
@end //shape
下面來看這個類的實現:
貌似前面說過實現的時候不帶前面的短線???
@implementation shape
-(void) setFillColor:(ShapeColor) c
{
fillColor = c;
}//setFillColor
-(void) setBounds:(ShapeRect) b
{
bounds = b;
}
-(void) draw
{
}//draw
@end //shape
雖然draw的方法沒有實現任何功能,但是我們仍然需要定義它,以便
shape的所有子類都能夠實現各自不同的方法。
@interface Circle:shape
@end //Circle
@implementation Circle
-(void) draw
{
NSLog(@"drawing a circle at(%d %d %d %d) in %@",bounds.x,
bounds.y,bounds.width,bounds.height,colorName(fillColor));
}
@end //Circle
子類重寫(override)了父類的draw方法發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.