I hear (and read on this site) a lot about "favour composition over inheritance".
But what is composition? I understand inheritance from the point of Person : Mammal : Animal, but I can’t really see the definition of composition anywhere…
Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.
Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.
Lost your password? Please enter your email address. You will receive a link and will create a new password via email.
Please briefly explain why you feel this question should be reported.
Please briefly explain why you feel this answer should be reported.
Please briefly explain why you feel this user should be reported.
Composition refers to combining simple types to make more complex ones. In your example, composition could be:
If you wanted to go totally composition (and get rid of all inheritance) it would look like this:
The advantage to this approach is that the types
MammalandPersondo not have to conform to the interface of their previous parent. This could be a good thing because sometimes a change to the superclass can have serious effects on the subclasses.They still can have access to the properties and behaviours of these classes through their private instances of these classes, and if they want to expose these former-superclass behaviours, they can simply wrap them in a public method.
I found a good link with good examples in Composition versus Inheritance. A Comparative Look at Two Fundamental Ways to Relate Classes.