il punto è che se le classi le hai definite tu e ti serve un metodo della classe derivata quando usi la classe base o hai un problema di progettazione delle classi (quindi rivederne la struttura) o utilizzare l'ereditarietà a tuo vantaggio (ad esempio definire un riferimento alla classe base e farlo puntare ad una classe derivata)

es: poniamo che la classe1 è base e la classe2 è derivata con un metodo foo (della classe2)

codice:
classe1 pippo = new classe2(); <-- pippo è di tipo class1 in apparenza ma in realtà è un oggetto della classe2

(classe2(pippo)).foo(); <-- questo si può fare
pippo.foo(); <-- questo non compila