import java.util.*;

class Veiculo {
    public Veiculo() {
	System.out.print("Veiculo ");
    }
    public void checkList() {
	System.out.println("Veiculo.checkList");
    }
    public void adjust() {
	System.out.println("Veiculo.adjust");
    }
    public void cleanup() {
	System.out.println("Veiculo.cleanup");
    }
}

class Automovel extends Veiculo {
    public Automovel() {
	System.out.println("Automovel");
    }
    public void checkList() {
	System.out.println("Automovel.checkList");
    }
    public void adjust() {
	System.out.println("Automovel.adjust");
    }
    public void cleanup() {
	System.out.println("Automovel.cleanup");
    }
}    

class Bicicleta extends Veiculo {
    public Bicicleta() {
	System.out.println("Bicicleta");
    }
    public void checkList() {
	System.out.println("Bicicleta.checkList");
    }
    public void adjust() {
	System.out.println("Bicicleta.adjust");
    }
    public void cleanup() {
	System.out.println("Bicicleta.cleanup");
    }
}    


public class Oficina {
    Random r = new Random();

    public Veiculo proximo() {
	Veiculo v;
	int code = r.nextInt();
	if (code%2 == 0)
	    v = new Automovel();
	else
	    v = new Bicicleta();

	return v;
    }

    public void manter(Veiculo v) {
	v.checkList();
	v.adjust();
	v.cleanup();
    }

    public static void main(String[] args) {
	Oficina o = new Oficina();
	Veiculo v;

	for (int i=0; i<4; ++i) {
	    v = o.proximo();
	    o.manter(v);
	}
    }
}

Código fonte