Método de llamada que existe en las clases secundarias pero no en la clase principal

public class Parent {
    ....
}

public class Child1 extends Parent {
    ....
    public void foo() {
        ....
    }
}

public class Child2 extends Parent {
    ....
    public void foo() {
        ....
    }
}

Aquí métodofoo() solo existe en las clases Child y NO PUEDE agregarse a la clase Parent (ni siquiera el método abstracto). En esta situación cuando quiero llamar alfoo() método enobj cual esParent referencia de la clase, entonces necesito usarintanceof con múltiplesif..else que quiero evitar

Parent obj = ...// Object of one of the child classes
obj.foo();

EDITAR: Necesito usar el tipo deobj comoParent solamente. De lo contrario, no podré llamar a los métodos en obj que existen en la clase Parent.

Mi solución: El enfoque que estoy pensando es definir una interfaz decirFooInterface confoo() y dejar que todas las clases secundarias lo implementen, entonces podría escribir castobj a esa interfaz y llame al método foo () de esta manera:

if(obj instanceof FooInterface){
    ((FooInterface)obj).foo();
}

¿Hay un mejor enfoque? ¿O alguna mejora a esta?

Respuestas a la pregunta(5)

Su respuesta a la pregunta