2015-07-09 3 views
3

У меня есть классA и ClassA, наследующий ClassX и методы доступа классаX. Как я могу получить доступ к методу ClassY с наследованием, потому что множественное наследование невозможно. Я не хочу создавать для этого другой класс композиции. Я хочу использовать тот же классA для множественного наследования.Как наследовать несколько классов в объекте C?

+0

У меня также есть проблема с наследованием нескольких классов. –

+1

Это вопрос того, как вы структурируете свой код. То, что вы просите, невозможно, вам нужно подумать, где вы размещаете свои методы, и почему вам нужно наследовать 2 разных класса. –

+2

Ваш вопрос выглядит как «ObjC не имеет множественного наследования. Как сделать множественное наследование в ObjC?» Ответ в этом вопросе. Вы этого не сделаете. Какую проблему вы решаете? –

ответ

4

Нет множественного наследования. Единственный способ добиться этого - слияние двухуровневой иерархии. Либо, если ClassX наследует ClassY или ClassY, наследует ClassX (тогда ClassA наследует дочерний класс X или Y).

Если два класса не по дизайну вписываются в одну и ту же иерархию, вы можете пересмотреть свой дизайн и причины, по которым вы не хотите использовать композицию.

+0

Фактически я наследую класс GoogleAdmodBanner в классе My и получаю доступ ко всем методам и делегированию, я также хочу наследовать класс GoogleInterstitialAd для доступа ко всем методам и делегировать в этом одиночном классе –

+0

Он делает не имеет смысла, что один и тот же класс является одновременно Баннером * и * также Интерстициальным (они имеют разные проявления, по крайней мере). Наследование означает * IS-A *. Если вы не можете сказать, что «X является типом Y», то X не должен наследовать от Y. –

+0

Зачем вам нужны обе функции из двух классов в том же классе, который вы реализуете? Почему бы не использовать отдельные классы? –

1

Подобно Objective-C, Swift не имеет множественного наследования. Swift использует протоколы и категории, чтобы дать вам такую ​​же способность. Вы можете определить протокол, который определяет набор методов, а затем добавить поддержку этого протокола к нескольким методам. Вы можете часто создавать поддержку протокола в категории, а затем эту категорию для своих классов по мере необходимости.

0

Как уже говорилось, множественное наследование не поддерживается языком (ни ObjC, ни Swift). Если вам нужно наследовать методы/свойства из нескольких классов, вам нужно будет использовать композицию. В качестве альтернативы, то, что язык позволяет вам сделать, - это обеспечить соответствие класса нескольким протоколам, что может быть или не быть решением проблемы, которую вы пытаетесь решить.

Я столкнулся с очень немногими случаями, когда я думал, что мне действительно нужно иметь множественное наследование, и даже для этих случаев они обычно решались путем использования соответствующего шаблона проектирования кода (думая о чем-то вроде конструкции «Банда четырех» узоры). По сути, вы хотите абстрагировать свой код таким образом, чтобы множественное наследование больше не требовалось.

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