0

Objective-c で Oops の概念を実装することに疑問があります。Objective-c でポリモーフィズムを実装する方法。例を挙げて説明してください。

4

3 に答える 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 に答える