调用子类问题的方法

时间:2014-03-25 16:40:00

标签: ios iphone oop inheritance backend

我有

@interface UserBaaS : BackendlessUser
@property (strong, nonatomic) NSString *username;
@end

@implementation UserBaaS
@synthesize username = _username;

- (void)setUsername:(NSString *)username {
    _username = username;
    [self setProperty:@"username" object:username];
}

- (NSString *)username {
    _username = [self getProperty:@"username"];
    return _username;
}
@end

在我的注册方法中,我在响应中获得了父类

[backendless.userService login:username password:password response:^(BackendlessUser *user) {

        [[Singleton sharedInstance] hideHudImmidialty];


        UserBaaS *userMy = (UserBaaS *)user;
        NSLog(@"successfully logged in for = %@", userMy.username);
        successBlock(userMy);

    }

但是我想调用子类的方法,我知道现在调用父类的方法。我明白userMy是BackendlessUser类(不是UserBaaS)的对象,但可能有办法吗?

如何强制调用子类的方法(UserBaaS)?

2 个答案:

答案 0 :(得分:0)

您需要实例化UserBaas实例。

现在你有一个BackendlessUser个实例并将它向下转换为UserBaaS并不会有任何好处。你只是骗代编译器,但实际的运行时对象无论如何都是BackendlessUser

如果您无法控制响应,则可以为UserBaas编写自己的初始值设定项(或工厂方法),并将BackendlessUser作为参数。

答案 1 :(得分:0)

您的用户仍然是BackendlessUser。除非您发回真正的UserBaaS,否则即使您尝试投射它也无法调用子方法。

你可以做的是通过在BackendlessUser类中添加init方法,使用BackendlessUser初始化一个新的UserBaaS

-(id)initWithBackendlessUser:(BackendlessUser*)user{
     self.username = user.username
}

,您的代码应如下所示:

[backendless.userService login:username password:password response:^(BackendlessUser *user) {

    [[Singleton sharedInstance] hideHudImmidialty];
    UserBaaS *userMy = [[UserBaaS alloc] initWithBackendlessUser:user];
    NSLog(@"successfully logged in for = %@", userMy.username);
    successBlock(userMy);
}