Objective-c で Oops の概念を実装することに疑問があります。Objective-c でポリモーフィズムを実装する方法。例を挙げて説明してください。
質問する
2710 次
3 に答える
1
クラス メソッドを含むすべてのメソッドは、Objective-C では動的です。
非常に基本的なアプローチの1つは次のとおりです。
ベース インターフェイスを宣言します。
@interface MONConstantColor : NSObject
- (UIColor *)color;
@end
基本実装を定義します。
@implementation MONConstantColor
- (UIColor *)color { return /* ...do/ret something appropriate */; }
@end
次に、いくつかのバリエーションを作成します。
@interface MONRedColor : MONConstantColor
@end
@implementation MONRedColor
- (UIColor *)color { return [UIColor redColor]; }
@end
@interface MONYellowColor : MONConstantColor
@end
@implementation MONYellowColor
- (UIColor *)color { return [UIColor yellowColor]; }
@end
于 2012-10-24T16:16:01.390 に答える
1
- (HomeWorkResult *)homeWorkResultFromHomeWorkTask:(HomeWorkTask *)task
{
if (!self.lazy) {
return [self HW_performHomeWorkTask:task];
}
StackOverflowPost *post = [StackOverflow postHomeWorkTask:task];
for (id user in post.responders) {
// Here is the pholyorphism[sic].
// First, test to see if a stack overflow user is able to do home work tasks.
if ([user respondsToSelector:@selector(homeWorkResultFromHomeWorkTask:)]) {
// Next, have the user do the home work task.
HomeWorkResult *result = [user homeWorkResultFromHomeWorkTask:task];
// If there is a result, return that result.
if (result) {
return result;
}
}
}
// Finally, if no stack overflow user does home work tasks or if there was no
// result perform the task yourself.
return [self HW_performHomeWorkTask:task];
}
于 2012-10-24T16:23:32.590 に答える
0
ポリモーフィズムという言葉は、多くの形を持つことを意味します
Objective-C ポリモーフィズムとは、メンバー関数を呼び出すと、関数を呼び出すオブジェクトのタイプに応じて、異なる関数が実行されることを意味します。
例を考えてみましょう。すべての形状に基本的なインターフェースを提供するクラス Shape があります。Square と Rectangle は基本クラス Shape から派生します。
OOP 機能のポリモーフィズムについて説明するメソッド printArea があります。
#import <Foundation/Foundation.h>
@interface Shape : NSObject
{
CGFloat area;
}
- (void)printArea;
- (void)calculateArea;
@end
@implementation Shape
- (void)printArea{
NSLog(@"The area is %f", area);
}
- (void)calculateArea{
}
@end
@interface Square : Shape
{
CGFloat length;
}
- (id)initWithSide:(CGFloat)side;
- (void)calculateArea;
@end
@implementation Square
- (id)initWithSide:(CGFloat)side{
length = side;
return self;
}
- (void)calculateArea{
area = length * length;
}
- (void)printArea{
NSLog(@"The area of square is %f", area);
}
@end
@interface Rectangle : Shape
{
CGFloat length;
CGFloat breadth;
}
- (id)initWithLength:(CGFloat)rLength andBreadth:(CGFloat)rBreadth;
@end
@implementation Rectangle
- (id)initWithLength:(CGFloat)rLength andBreadth:(CGFloat)rBreadth{
length = rLength;
breadth = rBreadth;
return self;
}
- (void)calculateArea{
area = length * breadth;
}
@end
int main(int argc, const char * argv[])
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
Shape *square = [[Square alloc]initWithSide:10.0];
[square calculateArea];
[square printArea];
Shape *rect = [[Rectangle alloc]
initWithLength:10.0 andBreadth:5.0];
[rect calculateArea];
[rect printArea];
[pool drain];
return 0;
}
このリンクを参照として使用して ください http://www.tutorialspoint.com/objective_c/objective_c_polymorphism.htm
于 2015-10-27T12:47:17.860 に答える