#iphone #objective-c #ios #inheritance
#iPhone #objective-c #iOS #наследование
Вопрос:
Скажем, у меня есть два класса:
@interface Rectangle: NSObject {
int width;
int height;
}
// Methods here...
@end
@interface Square: Rectangle
- (void)initWithLength:(int) length;
@end
Квадрат наследуется от прямоугольника. Теперь, если у меня есть метод, который принимает Rectangle
, скажем, в другом классе - (void)drawShape:(Rectangle *) rectangle
, могу ли я передать Square
ему объект? Должен ли я использовать id
? Каков наилучший способ динамического ввода унаследованных классов?
Также: это всего лишь пример. Мои классы намного сложнее, чем это. Например, категории не будут применяться к моей реальной проблеме. И если бы я использовал абстрактный класс выше Rectangle
, Shape
например, это изменило бы ответ?
Ответ №1:
Если у вас есть известный базовый класс, вам следует его использовать. идентификатор полезен, если вы выполняете утиный ввод, но проверка во время компиляции всегда является хорошей мерой против ошибок.
id обычно используется совместно с протоколами. Допустим, у вас есть программа под названием MyProtocol. Затем вы могли бы ввести переменную как id < MyProtocol > . Это позволит компилятору статически проверять ваш код.
Комментарии:
1. Я использую известную базу, но получаю предупреждение: «Несовместимые типы указателей передаются …» Это нормально?
2. О, извините. Забудьте о предупреждении. Я забыл включить .h для подкласса. Но спасибо за ответ. Хороший совет!