Вы не делаете.Измените свой дизайн.
Чтобы объяснить это, вот некоторый код.(В моем примере используется ruby, потому что его легко прочитать практически любому программисту, но это не вопрос ObjC, а о классах и наследовании).
class A
def one
"one"
end
def two
self.one + "-two"
end
end
class B < A
def one
"B-"+ super
end
end
a = A.new
puts a.one #=> "one"
puts a.two #=> "one-two"
b = B.new
puts b.one #=> "B-one"
puts b.two #=> "B-one-two"
Так что класс B
переопределяет метод one
от его родителя с его собственной реализацией.Который подобран, даже если мы не используем этот метод напрямую.Это потрясающая особенность любого языка на основе классов.у класса B есть свой собственный способ сделать one
, и как бы его ни попросили, он делает это по-своему.На самом деле вся идея дочернего класса, переопределяющего метод, состоит в том, что он хочет сделать что-то не так или дополненным способом от своего родителя.
Чтобы обойти это, вам нужно полностью избежать этой проблемы.Вместо этого переделайте внутренности в другой метод, который вы не переопределите.Тогда ваш базовый класс и дочерний класс могут вызывать этот другой метод для данных.Круто, что теперь ваш ребенок может переопределить этот другой метод, если ему это необходимо.
class A
def one
one_string
end
def two
self.one_string + "-two"
end
def one_string
"one"
end
end
class B < A
def one
"B-"+ self.one_string
end
end
a = A.new
puts a.one #=> "one"
puts a.two #=> "one-two"
b = B.new
puts b.one #=> "B-one"
puts b.two #=> "one-two"
В этом примере мы добавили третий метод, который класс B
наследует и не переопределяет.
Весь смысл в том, что дочерний класс сохраняет контроль над тем, какой код запускается, а НЕ за родительским классом.Это важно.Ваше желаемое решение будет означать, что вы должны изменить базовый класс, если вы хотите изменить это поведение.Но простое предоставление наследования дает вам максимальную гибкость, позволяя дочерним классам точно определять, как они хотят использовать методы, предоставляемые их родителями.