Sunteți pe pagina 1din 5

Programarea Orientata Spre Obiecte, Limbajul Java, 2019-2020 CEITI

Tema7. Moștenire multiplă. Interfețe.


Ce sunt interfețele?
Def. Interfaţa este o colecţie de metode şi date membre publice.
Cum se definește o interfață?
Sintaxa:
[public] interface <NumeInterfata>
[extends <ListaInterfete>]
{
// declaratii de membri de interfata
}
De exemplu:
interface Animal {
void maninca();
void doarme();
}

1. Numele interfeței nu coincide cu numele altei clase sau interfeţe din acelaşi pachet.
2. 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.
Rețineți !

3. Corpul unei metode într-o interfață este ; .


4. Toți membri interfeței sunt considerați implicit publici, dar dacă modificatorul public
este specificat atunci sunt accesibili şi înafara pachetului.
5. Deoarece variabilele unei interfeţe sunt considerate constante acestea trebuie să fie
inițializate altfel se va produce eroare de compilare.
6. Metode cu acelaşi nume dar tip de return diferit nu pot fi folosite în interfeţe.
7. 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:
8. E posibil ca o clasă să folosească variabilele cu acelaşi nume dintr-o altă interfață, în
Rețineți !

acest caz la accesarea acestora trebuie de respectat sintaxa:


numeInterfata.numeVariabila
9. La declararea unei metode nu este permisă apariția tuturor modificatorilor de acces,
doar public sau abstract.
10. Dacă o clasă implementează 2 interfeţe ce au metodă cu acelaşi nume este deajuns
să implementăm o singură metodă.
11.

Cum o clasă implementează o interfață ?


Pentru ca o clasă să implementeze o interfață trebuie să respecte sintaxa :
class numeClasa implements Interfata1,...,InterfataN { ...
}
De exemplu:
class Cal implements Animal{
void manica(){...}
void doarme(){...}
}

opreavictoria86@gmail.com © MUSTEAȚĂ Victoria


1
Programarea Orientata Spre Obiecte, Limbajul Java, 2019-2020 CEITI
1. O clasă poate implementa orice număr de interfeţe.
2. O clasă ce implementează o interfață trebuie obligatoriu să conțină cod pentru toate
metodele interfeței, din acest motiv o interfață implementată într-o clasă nu trebuie
modificată, dacă modificăm interfața obligatoriu modificăm şi codul sursă al clasei ce
o implementează.
3. Clasa ce implementează o interfață poate avea şi metode specifice ei, nu doar
Rețineți !

metodele interfeței.
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”);}
}
4. O interfață poate extinde o altă interfață, dar nu o poate implementa

Exemplu:
interface Poligon {
void getAria(int ... laturi);
}

class Dreptunghi implements Poligon {


public void getAria(int ... laturi) {
if (laturi.length==2)
System.out.println("Aria dreptunghiului este " + (laturi[0] * laturi[1]));
}}
class Patrat implements Poligon {
public void getAria(int ... laturi) {
if (laturi.length==1) System.out.println("Aria patratului este " +
(Math.pow(laturi[0], 2)));
}
}
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 clasă implementează mai multe interfețe, sau o interfață extinde mai multe interfeţe
spunem că simulăm moștenirea multiplă în Java.

opreavictoria86@gmail.com © MUSTEAȚĂ Victoria


2
Programarea Orientata Spre Obiecte, Limbajul Java, 2019-2020 CEITI
De exemplu:
interface Masina{
int viteza=90;
public void distanta();
}
interface Autobus{
int distanta=100;
public void viteza();
}
class Vehicul implements Masina,Autobus {
public void distanta(){
int distanta=viteza*100;
System.out.println("Distanta parcursa este "+distanta);
}
public void viteza(){
int viteza=distanta/100;
System.out.println("Viteza = "+viteza);
}
}
class DemoVehicule{
public static void main(String args[]){
System.out.println("Vehicul");
Vehicul v1=new Vehicul();
v1.distanta();
v1.viteza();
}}

interface Interfata_1{ public void metoda_1();


}
interface Interfata_2 extends Interfata_1 { public void metoda_2();
}
class DemoInterfete implements Interfata_2{
public void metoda_1(){
System.out.println("Aici metoda 1");
}
public void metoda_2(){
System.out.println("Aici metoda 2");
}
public static void main(String args[]){
DemoInterfete obj = new DemoInterfete();
obj.metoda_2();
}}
Notă! Interfețele nu pot fi instanțiate însă putem crea variabile referință de tip interfață. De
exemplu, dacă în metoda main() în exemplul de mai sus vom folosi construcția :
public static void main(String args[]){
Interfata_2 obj = new DemoInterfete();
obj.metoda_2();
}
Aceasta este validă, iar programul va afișa același rezultat. Vor putea fi apelate pentru obiectul obj
acele metode din Interfata_2 care au implementare în clasa dată. Variabilele referință de tip
opreavictoria86@gmail.com © MUSTEAȚĂ Victoria
3
Programarea Orientata Spre Obiecte, Limbajul Java, 2019-2020 CEITI
interfață se folosesc doar urmate de instanţierea clasei ce implementează interfața la care face
referință variabila.

Metode default și statice în interfețe


Începând cu versiunea Java 8 este permis ca în interfețe să fie definite metode statice și/sau
default după sintaxa:
public interface InterfataMea {
void metodaClasica();

default void metodaDefault() {


System.out.println(”metoda default!”);
}

static void metodaStatica(){


System.out.println(”metoda static!”);
}
}
Reguli de reținut:
1. Atât medodele default, cât și metodele statice în intrefață trebuie să conțină corp.
2. Metodele statice:
- pot fi accesate direct, respectând sintaxa: InterfațaMea.metodaStatica()
- aparțin în exculsivitate interfețelor, nu pot fi accesate de instanțele claselor care vor
implementa interfața
- clasele care vor implementa interfața nu vor putea supradefini așa tip de metodă
- clasele care vor implementa interfața vor avea posibilitatea să conțină metodă cu același
nume ca și metoda statică.
3. Metodele default:
- nu pot fi accesate direct
- clasele care vor implementa interfața are dreptul să 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 metoda 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ța;
 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.

public interface Vehicul {


String getBrand();

String speedUp();
String slowDown();
default String turnAlarmOn() {
opreavictoria86@gmail.com © MUSTEAȚĂ Victoria
4
Programarea Orientata Spre Obiecte, Limbajul Java, 2019-2020 CEITI
return "Alarmă conectată”;
}
default String turnAlarmOff() {
return "Alarma deconectata";
}
}

public class Masina implements Vehicul {


private String brand;
Masina(String nume){
brand=nume;
}
@Override
public String getBrand() {
return brand;
}
@Override
public String speedUp() {
return "Masina accelereaza";
}
@Override
public String slowDown() {
return "Masina incetineste";
}
}

public class TestMasina {


public static void main(String[] args) {
Vehicul car = new Masina("BMW");
System.out.println(car.getBrand());
System.out.println(car.speedUp());
System.out.println(car.slowDown());
System.out.println(car.turnAlarmOn());
System.out.println(car.turnAlarmOff());
}}

opreavictoria86@gmail.com © MUSTEAȚĂ Victoria


5

S-ar putea să vă placă și