[JAVA] Quiz sur le polymorphisme

Java Puzzlers Advent Calendar 2016 est dans une situation regrettable car il ne manque qu'un seul article, je vais donc remplacer l'article par Day 5 Je vais.

problème

class MyTest
{
	private static class A {
		String message = "hello";
		Consumer<String> hello = s -> System.out.print(message + s);
		void hello(String s) { this.hello.accept(s); }
	}
	
	private static class B extends A {
		String message = "Bonjour";
		void hello(String s) { this.hello.accept(s); }
	}

	public static void main(String[] args) {
		A b = (A) new B();
		b.hello(" world");
		System.out.print("/");
		b.hello.accept(" world");
	}
}

Le résultat de l'exécution du code ci-dessus est

Bonne réponse

La réponse est

La description

Cela peut sembler compliqué à première vue, mais en fait, si vous pouvez bien comprendre le polymorphisme, vous devriez être en mesure de le résoudre immédiatement. Jetons un œil au traitement de la méthode main. --Dans la première ligne de la méthode main, nous avons déclaré une variable b de l'implémentation ʻA type B. Le processus upcast appelé (A)` est écrit, mais en fait c'est un travail que le compilateur fait automatiquement, donc c'est juste ennuyeux et sans signification (bien que cela ne provoque pas d'erreur, bien sûr).

référence

Recommended Posts

Quiz sur le polymorphisme
Polymorphisme
Polymorphisme
[Java] Polymorphisme
À propos du polymorphisme
java (polymorphisme)
Encapsulation, polymorphisme