Documente Academic
Documente Profesional
Documente Cultură
Interfețe
profesor Dobrovolischii Olga
Interfețele
3
Clasele vs Interfețe
Clasele sunt folosite pentru a reprezenta ceva care are atribute (variabile, câmpuri) şi
capabilități/responsabilități (metode, funcționalități).
Interfețele descriu doar capabilități.
Asemănări
O interfață poate conține orice număr de metode
O interfață este scrisă într-un fișier cu extensia .java și numele fișierului coincide cu numele
interfeței
Codul pe biți al unei intefețe apare într-un fișier cu extensia .class
Interfețele sunt grupate în pachte.
Deosebiri
O interfață nu poate fi instanțiată
O interfață nu conține constructori
O interfață nu poate conține cîmpuri de instanță. singurele cîmpuri care pot apărea într-o
interfață trebuie declarate atît static cît și final.
O interfață nu este moștenită de o clasă , ea este implementată de aceasta.
O interfață poate moșteni mai multe interfețe.
Rețineți:
Numele interfeței nu coincide cu numele altei clase sau interfețe din același pachet.
Dacă declarația unei interfețe conține clauza extends atunci interfața va moșteni toate metodele
și constantele interfețelor enumerate în <ListaInterfete>, care se numesc superinterfețe.
Corpul unei metode într-o interfață este ;.
Toți membrii interfeței sunt considerați implicit publici, dar dacă modificatorul public este
specificat atunci sunt accesibili și în afara pachetului.
Deoarece variabilele unei interfețe sunt considerate constante acestea trebuie să fie
inițializate astfel se va produce eroare de compilare. Exemplu: int x;(eroare) int x=10 ;(corect)
Metode cu același nume dar tip de return diferit nu pot fi folosite în interfețe
Variabilele unei interfețe sunt considerate implicit public, static și final. Chiar dacă veți omite
aceste cuvinte rezervate vor fi adăugate în mod automat de compilatorul Java la faza de
compilare , în fișierul *.class.
Rețineți:
10. Dacă o clasă implementează 2 interfețe ce au metode cu aceleași nume este deajuns
să implementăm o singură metodă.
Cum o clasă implementează o interfață?
De exemplu:
class Cal implements Animal{
void maninca(){...}
void doarme(){...}
Observații:
De exemplu:
class Cal implements Animal{
void manica(){System.out.println(“Calul maninca”);}
void doarme(){System.out.println(“Calul doarme”);}
void participa(){System.out.println(“Participa la intreceri”);}
}
O interfață poate extinde o altă interfață, dar nu o poate implementa.
Exemplu:
public interface Poligon {
void getAria(int... laturi);
class Main {
public static void main(String[] args) {
Dreptunghi r1 = new Dreptunghi();
r1.getAria(5, 6);
Patrat p1 = new Patrat();
p1.getAria(5);
}
}
Cum simulăm moștenirea multiplă folosind Interfețe?
Atunci cînd o altă clasă implementează mai multe interfețe , sau o interfață extinde mai
multe interfețe spunem că simulăm moștenirea multiplă.
interface interface
interface
Exemplu 1;
public interface Masina {
int viteza = 90;
public void distanta();
}
public interface Autobus {
int distanta = 100;
public void viteza();}
}
public interface Interfata_2 extends Interfata_1 {
public void metoda_2();
}
public class DemoInterfete implements Interfata_2 {
public void metoda_1() {
System.out.println("Aici metoda 1");
}
Aceasta este validă , iar programul va afișa același rezultat. Vor fi apelate pentru obiectul
obj acele metode din Interfata_2 care au impementare în clasa dată.
Începînd cu versiunea Java 8 este permis ca în interfețe să fie definite metode statice si/sau
default după sintaxa:
Atît metodele default cît și metodele statice în interfață trebuie să conțină corp.
Metodele statice:
c.clasele care vor implementa interfața nu vor putea supradefini așa tip de metodă
d.clasele care vor implementa interfața vor avea posibilitatea să conțină metodă cu același
nume ca și metoda statică.
Reguli de reținut:
3. Metodele default
nu pot fi accesate direct
clasele care vor implementa interfața are dreptul sa supradefinească așa tip de metodă
permit modificarea interfețelor fără a afecta clasele care deja au implementat interfața
atunci cînd extinzi o interfață de către altă interfață care are o metodă default poți face una
din următoarele acțiuni:
să nu o menționezi, ceea ce înseamnă că o moștenești așa cum e de la interfață
să o redeclari , ceea ce o face de tip abstract , iar clasele care vor implementa interfața , vor
adăuga o altă implementare a acestei metode
să o redefinești, ceea ce o suprascrie pe cea originală, cu o implementare default diferită
Avantajele acestor tip de metode în cadrul interfețelor sunt următoarele:
metode statice: există dreptul de a nu defini o clasă separată pentru o metodă utilitară
metode default: există posibilitatea de a defini o funcționalitate comună pentru toate clasele
care vor implementa interfața.
Exemplu:
public interface Vehicul { public class Masina implements Vehicul { public class TestMasina {
String getBrand(); private String brand;
public static void main(String[]
String speedUp(); Masina(String nume) { args) {
brand = nume; Vehicul car = new
String slowDown(); } Masina("BMW");