Ho sotto codice / classi / interfacce:
-
Un'interfaccia:
public interface Animal<A extends Animal<A>>{ void fight(A otherAnimal); }
2. Classe di tigre che sta implementando Animal
public class Tiger implements Animal{
@Override
public void fight(Tiger otherAnimal) {
System.out.println("Tiger Fights");
}
}
3. Ho una classe Lion che implementa anche Animal
Public class Lion implements Animal{
@Override
public void fight(Lion otherAnimal) {
System.out.println("Lion Fights");
}
-
Ho una classe di test che chiameremo fight:
public class TestClass{ public static void main(String[] args){ Animal tiger = new Tiger(); Animal lion = new Lion(); tiger.fight(lion); } }
Ora quando eseguo la classe di test, l'ovvio risultato è "Tiger Fights".
Come dovrei ridisegnare in modo che quando chiamo lotta alla tigre con qualcosa di diverso dalla tigre, dovrei chiamare le loro rispettive classi.
Quindi nell'esempio sopra dovrebbe invocare il combattimento di Leone anche se il combattimento è chiamato su oggetto di tigre.
Ho bisogno dell'output come "combattimento di leoni" anche se sto invocando un oggetto di tigre. Significa in realtà che voglio che lo sviluppatore abbia la libertà di passare qualsiasi tipo di oggetto a qualsiasi classe. La mia aspettativa è basata sul tipo di oggetto che deve essere chiamato il rispettivo metodo sovrascritto.
Ho bisogno di questo dinamismo perché possono esserci N numero di diversi animali (gatto, cane, lupo ecc.) che potrebbero essere aggiunti nel prossimo futuro.
È possibile progettare in modo tale che l'interfaccia di My Animal decida quale classe chiamare a seconda del tipo di oggetto passato?