Grand Classique du Recrutement – Le Polymorphisme

Le polymorphisme est une notion de base en programmation objet que certains développeurs oublie des fois. Voici un test que bon nombre de recruteurs font passer en Java. Nous allons voir ici une question récurrente sur le polymorphisme.

class A
{
	int f(A a)
	{
		return 1;
	}
}
 
class B extends A
{
	int f(A a)
	{
		return 2;
	}
 
	int f(B b)
	{
		return 3;
	}
}

Si on exécute ce code:

public static void main(String[] astrArgs)
{
	A a = new A();
	A ab = new B();
	B b = new B();
 
	// Partie a
	System.out.println( a.f(a) );
	System.out.println( a.f(ab) );
	System.out.println( a.f(b) );
 
	// Partie ab
	System.out.println( ab.f(a) );
	System.out.println( ab.f(ab) );
	System.out.println( ab.f(b) );
 
	// Partie b
	System.out.println( b.f(a) );
	System.out.println( b.f(ab) );
	System.out.println( b.f(b) );
}

Qu’obtient on ? (La réponse suit, ne trichez pas)

— Partie a —
1
1
1
— Partie ab —
2
2
2
— Partie b —
2
2
3

Si vous n’avez pas trouvé la bonne réponse, allez lire cet excellent article http://mess.genezys.net/polymorphisme qui vous expliquera comment fonctionne le polymorphisme en Java.

Souvenez vous que: la redéfinition d’une méthode (override) se fait lors de l’exécution, tandis que la surcharge (overload) s’effectue lors de la compilation.

Une fois que vous aurez démontrer vos connaissances techniques avec cet exercice vous pourrez préparer aux questions pièges de la RH