when does method overloading is determined?
Method overloading is determined at compile time —the compiler decides which overloaded method to call based on the argument list (number, types, and order of parameters), before the program runs.
Quick Scoop: Core Idea
When you write multiple methods with the same name but different parameter lists in a language like Java, the compiler chooses which one to use while compiling your code, not while it’s running.
- The choice is based on:
- Number of arguments.
- Types of arguments.
- Order of arguments.
- This is why method overloading is often called compile-time or static polymorphism.
When exactly is it determined?
The resolution happens during compilation, at the point where you call the method.
For example in Java:
java
void print(int x) { }
void print(double x) { }
print(5); // compiler chooses print(int)
print(5.0); // compiler chooses print(double)
- The compiler:
- Looks at all methods named
print. - Filters those whose parameter lists can accept the given arguments.
- Picks the most specific applicable method.
- Looks at all methods named
- If it cannot decide without ambiguity, you get a compile-time error.
At runtime, the decision is already baked into the compiled bytecode; the call goes straight to the chosen method version.
Overloading vs Overriding Timing
This is where many learners get confused, especially in interview or forum questions.
- Method overloading
- Same method name, different parameter list, usually in the same class.
* Resolved at **compile time** (which version to call is fixed before execution).
- Method overriding
- Same method signature in superclass and subclass.
* The method to execute is chosen at **runtime** based on the actual object type (dynamic dispatch).
That’s why overloading is also called static binding , while overriding is dynamic binding.
Tiny Story Example
Imagine a Java println call:
java
System.out.println(10); // int
System.out.println("Hi"); // String
System.out.println(3.14); // double
There are many overloaded println methods in PrintStream, each with
different parameter types.
- When you write
println(10), the compiler decides:
“This matches theprintln(int x)version best,” and wires that call into the compiled code.
- That decision doesn’t change at runtime; the JVM just runs the chosen method.
Forum-style takeaway
In common OOP languages like Java and C++, method overloading is determined at compile time , using the method’s parameter list (number, type, and order) to pick the best match. Overriding, in contrast, is resolved at runtime based on the actual object type.
TL;DR:
Method overloading is determined at compile time , by the compiler, using
the arguments’ number, types, and order to select the correct overloaded
method.
Information gathered from public forums or data available on the internet and portrayed here.