
Зачем это нужно? Иногда возникают ситуации, когда для дочернего объекта нам важно только то, какими родительскими качествами он обладает, и совершенно неинтересны все его личные качества.
Например, после приведения объекта к родительскому типу можно вызвать реализацию именно родительского метода, если в дочернем классе он был переопределён.
Либо можно выбрать перегруженный метод в зависимости от типа, который будет в него передан:
class SomeClass {
public void test(String s) {
System.out.println("Length is " + s.length());
}
public void test(Object obj) {
System.out.println("Hash code is " + obj.hashCode());
}
}
Визуально вызов метода будет выглядеть одинаково, но результат получится разный:
String s = "rambaharamambaruum";
SomeClass scl = new SomeClass();
scl.test(s); // Length is 18
scl.test((Object)s); // Hash code is 2096171470