si definiscono i metodi e proprietà con lo stesso nome
in modo che una classe derivata possa ridefinire un metodo della classe base con lo stesso nome
a seconda che venga chiamare una routine nella classe base o nella derivata viene richiamata la routine corrispondente

esempio:
class Animal classe principale
{

public void move()
{
System.out.println("Animals can move");
}
}


class Dog extends Animal classe derivata
{
public void move()
{
System.out.println("Dogs can walk and run");
}
}


public class TestDog
{

public static void main(String args[])
{
Animal a = new Animal(); // Animal reference and object
Animal b = new Dog(); // Animal reference but Dog object

a.move(); // runs the method in Animal class
b.move(); // runs the method in Dog class
}
}


Animals can move
Dogs can walk and run