Dezvoltarea programelor Java este însoțită uneori de surprize neplăcute. Iată mai jos un exemplu: (se presupune că cele 2 interfețe deja există și nu pot fi modificate, iar noi vrem să scriem o clasă care le implementează pe amândouă).
/**
* Puteti face clasa de mai jos sa se compileze?
* (aveti voie sa adaugati cod, dar nu sa modificati codul deja
* existent)* Puteti face clasa de mai jos sa se compileze?
* (aveti voie sa adaugati cod, dar nu sa modificati codul deja
*/
public class ConflictDeInterfete implements Interfata1, Interfata2{
// ce trebuie scris aici ?
}
interface Interfata1 {
public void metoda1(String arg1);
}
interface Interfata2 {
public int metoda1(String arg1);
public long metoda2(int arg1, int arg2);
}
In mod normal, in ConflictDeInterfete ar trebui sa override metodele din interfete. Cum metoda1 din cele 2 interfete are aceeasi signatura, dar difera tipul returnat, nu poate fi suprascrisa de 2x. => codul nu se compileaza, pentru ca tipul returnat pentru metoda1 este incompatibil cu Interfata2.metoda1.
RăspundețiȘtergere@Override
public long metoda2(int arg1, int arg2) {
return 0;
}
@Override
public void metoda1 (String arg1) {
System.out.println("something..");
}
Solutia ar fi:
-fie sa se schimbe numele metodei1 intr-una din interfete
-fie sa se implementeze numai una din interfete.