Considering his above thought, he asked why OOPS principle still have method overloading and why is being used so intensively? What is intention of inventors to introduce concept of method overloading?
First of all, overloading is not related to OOP. From Programming -- Principles and Practice Using C++ by Bjarne Stroustrup:
The use of inheritance, run-time polymorphism, and encapsulation is the most common definition of object-oriented programming.
Note that overloading is not one of the key principles of OOP.
Now if we come to overloading, then the logic to support it is to make the code readable (though it can be considered as opinion based). For example, C has following functions:
int abs(int j);
long int labs(long int j);
double fabs(double x);
float fabsf(float x);
But C++ has overloaded version of abs with different types (C++ still support C functions for backward compatibility though). Instead of inventing new names for same functionality with different types, it is easier and more readable if compiler itself can differentiate among functions with same name but different types, i.e. overloaded functions. This is also known as static polymorphism as the comment from @Basilevs pointed.
We can get the intention of Bjarne Stroustrup, the creator of C++, from his book The Design and Evolution of C++. According to him, several people wanted operator overloading but he was initially reluctant as:
- It was hard to implement.
- It was hard to teach and hard to define precisely.
- Code using operator overloading was reputed to be inefficient.
- It was reputed to make the code incomprehensible.
However if those problems could be solved then it could solve some real problem and many people wanted that support. He eventually overcame these problems and overloading became a part of C++. From the book:
However, if all of these conjectures were false, overloading would solve some real problems for C++ users. There were people who would like to have complex numbers, matrices, and APL-like vectors in C++. There were people who would like range-checked arrays, multidimensional arrays, and strings. There were at least two separate applications for which people wanted to overload logical operators such as I (or), & (and), and A (exclusive or). The way I saw it, the list was long and would grow with the size and the diversity of the c++ user population. My answer to [4], "overloading makes code obscure," was that several of my friends, whose opinion I valued and whose experience was measured in decades, claimed that their code would become cleaner if they had overloading. So what if one can write obscure code with overloading? It is possible to write obscure code in any language. It matters more how a feature can be used well than how it can be misused.
The related portion(page 78) is available in Google Books for free preview. Please have a look into it for more detailed discussion.
Though this was the design decision made by the inventor of C++, I think similar rationally applies to other languages too.