JavaScript - Polymorphism
JavaScript - Polymorphism
Polymorphism in JavaScript
Thepolymorphismin JavaScript allows you to define multiple methods with the same name and different functionalities. Polymorphism is achieved by using methodoverloadingandoverriding. JavaScript does not support method overloading natively. Method overriding allows a subclass or child class to redefine a method of superclass or parent class. In this chapter, we will implement the polymorphism using the concept of method overriding.
The polymorphism word is derived from the geek word polymorph. If you break the polymorph, the meaning of the βpolyβ means many, and βmorphβ means transforming from one state to another state.
Method Overriding
Before you understand the polymorphism, it is important to understand the method overriding.
If you define a method with the same name in the parent and child class, the child class method overrides the parent classβs method.
For example, you want to calculate the area of the different shapes. You have defined the Shape class containing the area() method. Now, you have a different class for the different shapes, and all extend the Shape class, but you canβt use the area() method of the Shape class to find the area of each shape as each geometry has a different formula to find the area.
So, you need to define the area() method in each child class, override the area() method of the Shape class, and find the area of the particular shape. This way, you can create many forms of the single method.
Examples
Letβs understand the polymorphism and method overriding via the example below.
Example 1: Demonstrating Polymorphism in JavaScript
In the example below, the Shape class contains the area() method. The Circle and Rectangle, both classes, extend the Shape class. Also, the area() method is defined in the Circle and Rectangle class.
There are 3 area() methods defined in the below code, but which method will invoke it depends on which classβs instance you are using to invoke the method.
Output
The area of Circle is 78.5
The area of Rectangle is 50This way, you can define the same method with different functionalities and invoke a particular one according to the required functionalities.
You can also call the parent class method in the child class using the super keyword. Letβs understand it via the example below.
Example 2: Parent Class Methodβs Functionality Extension in Child Class
The Math and AdvanceMath class contains the mathOperations() method in the example below.
In the mathOperations() method of the AdvanceMath class, we used the super keyword to invoke the mathOperations() method of the parent class. We extend the functionality of the math classβs mathOperations() method in the AdvanceMath classβs mathOperations() method.
Also, when you invoke the mathOperation() method using the object of the Math class, it invokes the method of the Math class only.
Output
Addition: 15
Subtraction: 5
Multiplication: 50
Division: 2This type of polymorphism is calledruntime polymorphism, as the JavaScript engine decides which method it should execute at the run time based on which classβs instance is used.
Benefits of using Polymorphism in JavaScript
There are many advantages to using polymorphism in JavaScript; we have explained some of them here.
- Code reusabilityβ Polymorphism allows you to reuse the code. In the second example, we have reused the code of the mathOperations() method of the math class.
- Extensibilityβ You can easily extend the current code and define new functionalities.
- Dynamic behaviorsβ You can have multiple classes containing the same method with different functionalities and call the method of the particular class dynamically at the run time.
You canβt achieve the compile time polymorphism in JavaScript as you canβt overload the method.