Une méthode n'est pas héritée si elle est redéfinie dans la classe dérivée, avec le même type de retour et le même profil. Par exemple, la classe PointImmobile suivante redéfinit la méthode translater() de profil (double, double) :
class PointImmobile extends Point { PointImmobile(double x, double y) { super(x, y); } void translater(double dx, double dy) {} }
La redéfinition des méthodes permet d'utiliser le mécanisme d'extension, non pour enrichir une classe en lui ajoutant des membres, mais pour la spécialiser en modifiant le comportement de certaines méthodes. Le mécanisme de liaison tardive, propre aux langages à objets, permet de tirer parti de ces redéfinitions.
Signalons que la redéfinition d'une méthode peut invoquer la méthode de la classe parente à l'aide du nom super : employé dans une méthode, il réfère à l'objet auquel s'applique cette méthode, en tant qu'instance de la classe parente. Il permet ainsi d'accéder aux membres (champs ou méthodes) définis dans la classe parente, même s'ils sont masqués ou redéfinis dans la classe contenant cette utilisation de super ; ce serait le cas si nous avions redéfini translater ainsi :
void translater(double dx, double dy) { super.translater(0, 0); }