代码之家  ›  专栏  ›  技术社区  ›  Ashish

如何在同一层继承两个类?

  •  2
  • Ashish  · 技术社区  · 17 年前

    我是iPhone领域的新手。我正在尝试使用Cocos2d构建一个iPhone应用程序。我用过像贝娄这样的班级-

    @interface MenuScene : Scene {}
    @end
    
    
    @interface FlipView : UIImageView
    {
        CGPoint startTouchPosition;
        NSString *dirString;
        UIImageView *firstPieceView;   
        UIImageView *secondPieceView;
    
    }
    @end
    
    @interface HelloController : UIViewController 
    @end
    
    
    @interface MenuLayer: Layer{        
            Menu * menu;        
        NSString *dirString;
        CGPoint startTouchPosition;
    }
    -(void) button1: (id)sender;
    -(void) button2: (id)sender;
    -(void) black_jack: (id)sender;
    @end
    

    我想将两个类(FlipView、HelloController)继承到MenuLayerClass。但我该怎么做呢。实际上,语法是什么。请用代码或语法回复我的任何评论。

    2 回复  |  直到 12 年前
        1
  •  8
  •   Rog    17 年前

    你不能。正如克拉克所说,Objective-C不支持多重固有。这是因为设计师们认为,多重固有的优点并不能证明它所鼓励的复杂性和糟糕的设计是合理的。

    相反,它们包含了一些能满足你需求的东西。可以使用@protocol指令声明“协议”。协议描述了类响应但不能向对象添加数据的一组方法。

    要使用协议,请在超类后面的尖括号中包含协议名称。

    例如

    @protocol myProtocol
    -(void)myProtocolMethod
    @end
    
    @interface myClass : NSObject <myProtocol>
    {
        int someData;
    }
    

    将给出一个NSObject子类,该子类也必须响应 (void)myProtocolMethod 信息。

    也就是说,我同意克拉克的观点,你应该重新审视你的设计——有一个对象既是FlipView,又是HelloController,听起来不太好。您可能应该实现一个FlipController,并使用第三个类(模型)来同步两个控制器之间的状态——或者,如果您的应用程序非常简单,可以使用一个类作为FlipView和UIController的代理。

        2
  •  1
  •   clarkcox3    17 年前

    你不能,因为Objective-C没有多重继承。此外,将一个类同时作为视图和视图控制器是没有意义的。

    推荐文章