What is the difference between inheritance and composition?

此生再无相见时 提交于 2020-06-10 04:40:06

问题


As title says, the meaning of both eludes me.


回答1:


Inheritance expresses a is-a relationship, while composition expresses a has-a relationship between the two classes.

An example for composition is a polygon. It has a ordered sequence of Points. In C++ terms:

struct Polygon {
  std::vector<Point> points;
};

While an logic_error is a exception:

struct logic_error : public exception {
};



回答2:


As pmr pointed out, inheritence is a is-a relationship, composition is a has-a relationship.

Composition is usually used for wrapping classes and to express relationships between classes that contain one another.

Inheritance is used for polymorphism, where you have a base class and you want to extend or change its functionality.




回答3:


Just google Inheritance vs Composition you'll get alot of results.
Using java as an example

public class Banana extends Fruit{ //<---Inheritance Banana is-a Fruit
    private Peel bananaPeel; //<--Composition banana has a Peel
    public Peel getPeel(){
        return bananaPeel;
    }
}



回答4:


Inheritance means inheriting something from a parent. For example, you may inherit your mother's eyes or inherit your father's build.

It means deriving properties, characteristics and behaviors from a parent class. So you can parent.walk(), parent.sleep(), parent.sleep() or whatever.

Containership or maybe composition is a bit hard to explain.

Or maybe a car has a brake. The car is composed of a brake. But the brake isn't inheriting from a brake..different concepts. I know very weird explanation..but that's how much I can do I guess.

Let's look at this code:

class Parent 
{
   public :
     void sleep() ; void eat() ; void walk()  ; 
     string eyeColor; int height ; 
};

class Child: public Parent
{

}

So the Child class can inherit the functions and attributes of the Parent but of course it may have the eye color of the mother or father.. Even if the childs' attributes are different it can still do whatever the Parent can do.

Now composition is another thing. A Child can have a toy or a Parent can have a child. So I could do:

class Toy
{
  string model ; 
};

class Child
{
   Toy transformersToy ;
};

So the Child has the transformers toy now.. but does Child inherit the transformersToy.model attribute? No, because it isn't inheriting.




回答5:


inheritance is a relationship between classes, containership is relationship between instance of classes.




回答6:


inheritance is the dynamic polymorphism, that these days change its functionality to a technic of a code reuse. but the composition is a technic for ensuring capability of implementation.



来源:https://stackoverflow.com/questions/7502167/what-is-the-difference-between-inheritance-and-composition

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!