Приведение дочернего объекта к состоянию родительского

Приведение дочернего объекта к состоянию родительского

При приведении дочернего объекта к состоянию родительского (сняли с себя весь тюннинг) остаются доступными свойства/методы только родительского класса (или интерфейса, если объект приводился к типу интерфейса). Свойства/методы, определенные в самом дочернем классе в этом случае становятся недоступными.

Зачем это нужно? Иногда возникают ситуации, когда для дочернего объекта нам важно только то, какими родительскими качествами он обладает, и совершенно неинтересны все его личные качества.

Например, после приведения объекта к родительскому типу можно вызвать реализацию именно родительского метода, если в дочернем классе он был переопределён.

Либо можно выбрать перегруженный метод в зависимости от типа, который будет в него передан:


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
ООП РАЗМЫШЛЕНИЯ