Lorsque tu hérites d'une méthode abstraite, tu es OBLIGE de l'implémenter. Si elle n'est pas abstraite, elle te fournit un comportement par défaut. Dans les deux cas, d'un point de vue de l'appelant, tu sais qu'elle est là. En "redéfinissant" la méthode, tu modifies son comportement et plie son fonctionnement à tes besoins. Dans le cas de ton code, tu "obliges" Swing à tracer tes tiles plutôt que le fond gris qu'il remplis par défaut dans paint (en fait, c'est légèrement différent, mais l'idée est là).
Voilà toutes les méthodes qui vont éventuellement appeler un "paint". Cette méthode ne sort pas du néant : elle est appelée par d'autres. C'est de la délégation : le dessin t'es délégué mais l'affichage "physique" est effectué par ses autres méthodes et leurs appelants :
Tu peux voir une interface comme un contrat, une classe abstraite comme un kit et une classe héritée comme un plugin éventuellement personnalisable.