1

にプロパティを追加しようとしていますUIBezierPath。そこで、 というサブクラスを作成しましたJWBezierPath。私はすべてのクラス メソッドの短縮形を数値パラメーターと共に使用したかったので、メソッドを作成しました。

+ (JWBezierPath *)bezierPathWithColor:(UIColor *)color {
    JWBezierPath *path = [self bezierPath];
    [path setColor:color];
    return path;
}

問題は、サブクラス[self bezierPath]の代わりにのインスタンスを返すことです。UIBezierPath私も具象クラスを使ってみました:[JWBezierPath bezierPath]

この問題を解決するにはどうすればよいですか?

4

2 に答える 2

1

+bezierPathクラスにメソッドを実装しない場合、JWBezierPath ではなく、UIBezierPath のインスタンスを作成するスーパークラスの実装が呼び出されます。

理論的には、それらのメソッドがオーバーライドされない場合でも、基本クラスのファクトリ メソッドがインスタンスを作成することは可能です。たとえば、BaseClass のファクトリ メソッドの 2 つのオプションを検討してください。

// Will create instance of child class even if method won't be overriden
+ (instancetype) someObject {
   return [self new];
}

// Will always create instance of base class
+ (BaseClass*) someObject {
   return [BaseClass new];
} 

ただし、+bezierPath宣言 ( +(UIBezierPath *)bezierPath) と証拠を考慮すると、UIBezierPath クラスはそのように実装されておらず+bezierPath、cub クラスにメソッドを実装する必要があります。

于 2013-10-22T10:32:08.237 に答える