2012-07-04 2 views
0

У меня есть метод переопределения, как показано ниже. Пожалуйста, проигнорируйте то, как я написал, это может быть не совсем написано, просто для образца. Но я хочу знать, что будет выводить, если метод i переопределен таким образом для переменной «a».iPhone: Результат переопределения метода

-> базовый класс

@interface A 
{ 
    int a=15; 
} 
-(int) myFunction; 
@end 

-> производный класс

@interface B : A 
{ 
    int a=10; 
} 
-(int) myFunction; 
@end 

Позволяет изображение "MyFunction" возвращает "A". Так как, это делает метод подмену, когда я называю как,

B bObj; 
bObj.a = ? 

Что должно быть на выходе 10 или 15?

ответ

1

Я предполагаю, что вы знаете, что вы не можете объявлять переменные в таком заголовке, а инициализация существует только для простоты.

Точно так же, ваш B bObj не был инициализирован и не является указателем


bObj.a вернуться будет 10. Так будет [bObj myFunction]. Вы переопределили метод и сказали компилятору игнорировать предыдущие реализации этого метода и использовать новый.

Можете ли вы предложить то, что выход из этого может быть:

A *obj = [[B alloc] init]; 
NSLog(@"%d", [obj myFunction]); 

или это:

B *obj = [[A alloc] init]; 
NSLog(@"%d", [obj myFunction]); 
-1

, если ребенок и родитель, как будет возвращать то его метод подмену ... но если класс A myFunction: возвращает myfunction A и класс b возвращает B или тип возвращаемого типа ссылочного типа, который имеет такое же отношение, что у всех есть классы. Родительские и дочерние отношения тогда это также знают как переопределение

+0

Это очень запутанный ответ. Я уверен, что это тоже не правильно. Нет ничего (синтаксически) неправильно с переопределением метода и обеспечения той же реализации, что и суперкласс –

+0

вы на самом деле .. по ошибке я поставил там Не .. извините .. но часть отдыха довольно ясная и правильная .. – Abhishek

Смежные вопросы