# Creating inheritance

Inheritance is a means of organizing, extending, and reusing functionality. Subclasses inherit properties and methods from superclasses and add their own specialized properties and methods. For example, reflecting the real world, Bike would be a superclass and MountainBike and Tricycle would be subclasses of the superclass. Both subclasses contain, or inherit, the methods and properties of the superclass (for example, `wheels`). Each subclass also has its own properties and methods that extend the superclass (for example, the MountainBike subclass would have a `gears` property). You can use the elements `prototype` and `__proto__` to create inheritance in ActionScript.

All constructor functions have a `prototype` property that is created automatically when the function is defined. The `prototype` property indicates the default property values for objects created with that function. You can use the `prototype` property to assign properties and methods to a class. (For more information, see Assigning methods to a custom object.)

All instances of a class have a `__proto__` property that tells you what object they inherit from. When you use a constructor function to create a new object, the `__proto__` property is set to refer to the `prototype` property of its constructor function.

Inheritance proceeds according to a definite hierarchy. When you call an object's property or method, ActionScript looks at the object to see if such an element exists. If it doesn't exist, ActionScript looks at the object's `__proto__` property for the information (`myObject.__proto__`). If the property is not a property of the object's `__proto__` object, ActionScript looks at `myObject.__proto__.__proto__`, and so on.

The following example defines the constructor function `Bike`:

    function Bike (length, color) {
    	this.length = length;
    	this.color = color;
    }

The following code adds the `roll` method to the Bike class:

    Bike.prototype.roll = function() {this._x = _x + 20;};

Instead of adding a `roll` method to the MountainBike class and the Tricycle class, you can create the MountainBike class with Bike as its superclass:

    MountainBike.prototype = new Bike();

Now you can call the `roll` method of MountainBike, as in the following:

    MountainBike.roll();

Movie clips do not inherit from each other. To create inheritance with movie clips, you can use the `Object.registerClass` method to assign a class other than the MovieClip class to movie clips. See `Object.registerClass()`.

For more information on inheritance, see `Object.__proto__`, `#initclip`, `#endinitclip`, and `super`.