Ответ 1
Давайте просто так выразиться. Не переопределяйте методы, используя категории, период, когда-либо, конец ответа.
Если метод определен как для класса, так и для категории в этом классе, это undefined, реализация которого будет вызываться.
Но как это взаимодействует с наследованием? В частности:
Давайте просто так выразиться. Не переопределяйте методы, используя категории, период, когда-либо, конец ответа.
Если метод определен как в классе, так и в категории этого класса, это undefined, реализация которого будет вызываться.
Это неверно; метод категории всегда будет побеждать. Однако это не сработает, если у вас есть несколько категорий, которые реализуют один и тот же метод, тогда "победитель" - undefined.
Это, как правило, "последние загруженные победы", но это тоже не тяжелое правило.
Обратите внимание, что поскольку многие классы будут внутренне иметь свою реализацию, разделяющую между категориями для целей организации кода, вы все равно не можете полагаться на первое правило.
Короче говоря, что сказал Иисус Навин; Не переопределять методы с помощью категорий.
Помимо причин наследования, вы также жестоко нарушаете инкапсуляцию, когда вы это делаете. Дело не в том, что реализация на основе категорий переопределяет существующий метод, он полностью ее заменяет. Таким образом, если вы не воспроизводите каждую последнюю деталь внутренней реализации, включая ошибки, ваша замена не будет работать правильно, и отладка будет сложной.
Из того, что я тестирую
Взгляните на категорию и подкласс теста