Polymorphism
This site utilizes Google Analytics, Google AdSense, as well as participates in affiliate partnerships with various companies including Amazon. Please view the privacy policy for more details.
Interesting problem / assumption I had with polymorphism recently. Take this code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Object> objects = new ArrayList<>();
objects.add(new Object());
objects.add(new String());
objects.add(new Date());
for(Object object : objects) {
method(object);
}
}
public static void method(Object o) {
System.out.println("Object method!");
}
public static void method(String s) {
System.out.println("String method!");
}
}
I thought when the list iterates to the String object, it would go to the method with the String signature. Nope, it goes to the method with the Object signature.
Note:
So it goes by declaration (i.e. variable type) not object type. I tried a few more method calls:
The first and last method calls are to the String method, while the middle one is to the Object method.
Technically, it is polymorphism. Polymorphism “refers to a programming language’s ability to process objects differently depending on their data type or class” (http://www.webopedia.com/TERM/P/polymorphism.html), although the source continues to say “More specifically, it is the ability to redefine methods for derived classes” so I get where you’re coming from.
Wikipedia calls the type of polymorphism I’m trying to use ad hoc polymorphism, which “is also known as function overloading or operator overloading” (https://en.wikipedia.org/wiki/Ad_hoc_polymorphism). The main polymorphism entry on Wikipedia says that “subtype polymorphism [is] when a name denotes instances of many different classes related by some common superclass. In the object-oriented programming community, this is often simply referred to as polymorphism” (https://en.wikipedia.org/wiki/Polymorphism_%28computer_science%29)