Chamando o método que existe nas classes filho, mas não na classe pai

public class Parent {
    ....
}

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

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

Aqui métodofoo() existe apenas nas classes filho e NÃO PODE ser adicionado à classe pai (nem mesmo ao método abstrato). Nesta situação, quando eu quero chamar ofoo() método emobj qual éParent referência da classe, então eu preciso usarintanceof com múltiplosif..else o que eu quero evitar.

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

EDITAR: Eu preciso usar o tipo deobj ComoParent só. Senão, não poderei chamar métodos em obj que existem na classe Parent.

Minha solução: A abordagem que estou pensando é definir uma interface, digamosFooInterface comfoo() método e deixar todas as classes filho implementá-lo, então eu poderia apenas digitar cast oobj para essa interface e chame o método foo () como este:

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

Existe uma abordagem melhor ? Ou alguma melhoria para este?

questionAnswers(5)

yourAnswerToTheQuestion