tags:

views:

130

answers:

4

Let's say i have a griffon object that needs to be part of the felidae and bird class.
How do i do it ?
I can only make it inherit from 1 class at a time...

+5  A: 

This may help...

Multiple inheritance

  • There is no innate multiple inheritance (of course some see this as a benefit). To get around it you can create a compound class, i.e. a class with instance variables that are ids of other objects. Instances can specifically redirect messages to any combination of the objects they are compounded of. (It isn't that much of a hassle and you have direct control over the inheritance logistics.) [Of course, this is not `getting around the problem of not having multiple inheritance', but just modeling your world slightly different in such a way that you don't need multiple inheritance.]

  • Protocols address the absence of multiple inheritance (MI) to some extent: Technically, protocols are equivalent to MI for purely "abstract" classes (see the answer on `Protocols' below).

  • [How does Delegation fit in here? Delegation is extending a class' functionality in a way anticipated by the designer of that class, without the need for subclassing. One can, of course, be the delegate of several objects of different classes. ]

-Taken from http://burks.brighton.ac.uk/burks/language/objc/dekorte/0%5Fold/intro.htm

apocalypse9
+3  A: 

You can't, per se. But you can have references to as many other objects as you need and you can use multiple protocols.

Devin Ceartas
The Griffin Protocol would make a great movie title.
Thilo
A: 

First, make felidae a subclass of bird. Piece of cake. :-)

Alec
A griffon may be part cat and part bird, so I've heard, but to say all cats are birds is a bit absurd. Word.
dreamlax
Unnatural... What does happen regularily is that felidae absorb birds. Maybe that can be interpreted as object composition.
Thilo
A: 

You can dynamically create a class at runtime and choose the methods of each parent class to inherit. Have a look at the NeXT runtime's documentation here about dynamically creating classes. I did this once just for fun, but I didn't get very far as it gets incredibly messy very quickly.

Edit

It gets more difficult though, because there can only be one superclass, otherwise the keyword super becomes ambiguous.

dreamlax