Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 44 additions & 0 deletions JavaScript_Advance/polymorphism.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
// Polymorphism is one of the basic principles of object-oriented programming (OOP)
//It is the practice of designing objects to share behavior and be able to overwrite common behaviors associated with specific ones.

// First create the class Person
class Person {
constructor(name) {
this.name = name;
}

getName() {
return this.name
}

getPosition() {
return "Unemployed"
}
}

// Extend the class Person with Employee
class Employee extends Person {
constructor(name, position, salary) {
super(name); // super() calls the constructor of Person

this.position = position;
this.salary = salary;
}

getPosition() { //overwrites the method of person
return this.position
}

getSalary() {
return this.salary
}
}

let person = new Person("James");
let employee = new Employee("Torsten", "Developer", 45000);

console.log(employee.getName()); // Output: Torsten
console.log(person.getName()); // Output: James

console.log(employee.getPosition()); // Output: Developer
console.log(person.getPosition()); // Output: Unemployed
63 changes: 63 additions & 0 deletions docs/JavaScript_Advance/polymorphism.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
# Polymorphism
Polymorphism is one of the basic principles of **object-oriented programming (OOP)**. It is the practice of designing objects to share behavior and be able to overwrite common behaviors associated with specific ones. Polymorphism uses inheritance to realize this.

*Related: [Inheritance](JavaScript_Basics/inheritance.md), [Classes](JavaScript_Basics/classes.md)*

## Parent class
Let's create a `class` called Person first.
```javascript
class Person {
constructor(name) {
this.name = name;
}

getName() {
return this.name
}

getPosition() {
return "Unemployed";
}
}
```

## Child class
We like to extend this `class` for Employees. This can be done by creating a `class` and adding `extends`.
```javascript
class Employee extends Person {
constructor(name, position, salary) {
super(name); // super() calls the constructor of Person

this.position = position;
this.salary = salary;
}

getPosition() { //overwrites the method of person
return this.position
}

getSalary() {
return this.salary
}
}
```

## Output
As you can see in the output below, `getPosition()` gets overwritten in `Employee` and `getName()` can be used from `Person` in `Employee`
```javascript
let person = new Person("James");
let employee = new Employee("Torsten", "Developer", 45000);

console.log(employee.getName()); // Output: Torsten
console.log(person.getName()); // Output: James

console.log(employee.getPosition()); // Output: Developer
console.log(person.getPosition()); // Output: Unemployed
```

The above example describes the polymorphism in ECMAScript.
An object "Person" can be described in many forms (e.g. Employee, ...).

Another example from reality about polymorphism:

When I mention an Asian person, it is very abstract. It can be Japanese, Vietnamese or Indian. But they all share the typical characteristics of Asians.
45 changes: 23 additions & 22 deletions docs/_sidebar.md
Original file line number Diff line number Diff line change
@@ -1,27 +1,28 @@
- JavaScript Basics

- [Variables](Javascript_Basics/variables.md)
- [String Operation](Javascript_Basics/stringOperation.md)
- [Comparison Operators](Javascript_Basics/comparisonOperators.md)
- [Functions](Javascript_Basics/functions.md)
- [Arrays](Javascript_Basics/arrays.md)
- [Objects](Javascript_Basics/objects.md)
- [This](Javascript_Basics/this.md)
- [Classes](Javascript_Basics/classes.md)
- [Inheritance](Javascript_Basics/inheritance.md)
- [Exercise 1](Javascript_Basics/exercise-1.md)
- [Exercise 1 Using Object](Javascript_Basics/exercise-1-using-object.md)
- [Exercise 1 Using Classes](Javascript_Basics/exercise-1-using-classes.md)
- [Math](Javascript_Basics/Cookies.md)
- [Variables](JavaScript_Basics/variables.md)
- [String Operation](JavaScript_Basics/stringOperation.md)
- [Comparison Operators](JavaScript_Basics/comparisonOperators.md)
- [Functions](JavaScript_Basics/functions.md)
- [Arrays](JavaScript_Basics/arrays.md)
- [Objects](JavaScript_Basics/objects.md)
- [This](JavaScript_Basics/this.md)
- [Classes](JavaScript_Basics/classes.md)
- [Inheritance](JavaScript_Basics/inheritance.md)
- [Exercise 1](JavaScript_Basics/exercise-1.md)
- [Exercise 1 Using Object](JavaScript_Basics/exercise-1-using-object.md)
- [Exercise 1 Using Classes](JavaScript_Basics/exercise-1-using-classes.md)
- [Math](JavaScript_Basics/Cookies.md)

- JavaScript Advance

- [Arrow Function](Javascript_Advance/arrowFunction.md)
- [Filtering Arrays](Javascript_Advance/FilteringArray.md)
- [Destructuring](Javascript_Advance/destructuring.md)
- [Spread & Rest](Javascript_Advance/spread&rest.md)
- [Timer Function](Javascript_Advance/timerFunction.md)
- [Event loop](Javascript_Advance/eventloop.md)
- [Promises](Javascript_Advance/promises.md)
- [fs Module](Javascript_Advance/fsModule.md)
- [Default Values](Javascript_Advance/defaultValues.md)
- [Arrow Function](JavaScript_Advance/arrowFunction.md)
- [Filtering Arrays](JavaScript_Advance/FilteringArray.md)
- [Destructuring](JavaScript_Advance/destructuring.md)
- [Spread & Rest](JavaScript_Advance/spread&rest.md)
- [Timer Function](JavaScript_Advance/timerFunction.md)
- [Event loop](JavaScript_Advance/eventloop.md)
- [Promises](JavaScript_Advance/promises.md)
- [fs Module](JavaScript_Advance/fsModule.md)
- [Default Values](JavaScript_Advance/defaultValues.md)
- [Polymorphism](JavaScript_Advance/polymorphism.md)