Sunteți pe pagina 1din 15

Clase abstracte si interfete Java – UNCODED https://uncoded.

ro/clase-abstracte-si-interfete-java/

 

JAVA , PROGRAMARE

Clase abstracte si interfete Java


AIRMAN · OCTOBER 16, 2019 · 3K VIEWS · 3 MINUTE READ

1
SHARES  SHARE 1  TWEET  MAIL  SHARE  SHARE

1 Clase si metode abstracte


2 Crearea si utilizarea interfetelor

Clase si metode abstracte


Clasele abstracte sunt utilizate pentru a declara caracteristici comune unor subclase. O clasa
abstracta nu poate � instantiata. Ea poate � utilizata numai ca si superclasa pentru alte clase
care extind clasa abstracta. Clasele abstracte sunt declarate prin intermediul modi�catorului
abstract.

O clasa abstracta poate contine atribute, care descriu caracteristicile clasei, si metode, care
descriu actiunile care pot � desfasurate de clasa. De asemenea, o clasa abstracta poate include
metode care nu sunt implementate. Aceste metode detin doar declaratie si poarta numele de
metode abstracte. Ca si in cazul claselor abstracte, metodele abstracte sunt insotite in declaratia

1 of 15 7/12/23, 07:37
Clase abstracte si interfete Java – UNCODED https://uncoded.ro/clase-abstracte-si-interfete-java/

lor de modi�catorul abstract.


 

Daca o clasa contine metode abstracte, atunci ea trebuie sa �e declarata abstracta.

1 package ro.virtualcampus.obiectgrafic;
2
3 public abstract class ObiectGrafic {
4
5 protected double x, y;
6
7 public ObiectGrafic() {
8 x = 0;
9 y = 0;
10 }
11 public ObiectGrafic(double x, double y) {
12 this.x = x;
13 this.y = y;
14 }
15
16 @Override
17 public String toString() {
18 return "ObiectGrafic [x=" + x + ", y=" + y + "]";
19 }
20 public abstract double aria();
21 public abstract double perimetrul();
22
23 public double getX() {
24 return x;
25 }
26 public void setX(double x) {
27 this.x = x;
28 }
29 public double getY() {
30 return y;
31 }
32 public void setY(double y) {
33 this.y = y;
34 }
35
36 }

ObiectGrafic.java hosted with by GitHub view raw

2 of 15 7/12/23, 07:37
Clase abstracte si interfete Java – UNCODED https://uncoded.ro/clase-abstracte-si-interfete-java/

Toate clasele concrete derivate dintr-o clasa abstracta trebuie sa implementeze metodele
 
abstracte prezente in clasa de baza.

Intr-o aplicatie Java care construieste obiecte gra�ce pot � de�nite cercuri, dreptunghiuri,
patrate, etc. Aceste categorii de obiecte gra�ce sunt implementate prin intermediul unor clase
concrete. Clasa abstracta care traseaza caracteristicile de baza ale obiectelor gra�ce este
de�nita mai sus (ObiectGra�c).

1 package ro.virtualcampus.obiectgrafic;
2
3 public class Cerc extends ObiectGrafic {
4
5 private double raza;
6
7 public Cerc(double raza) {
8 super();
9 this.raza = raza;
10 }
11 public Cerc(double x, double y, double raza) {
12 super(x, y);
13 this.raza = raza;
14 }
15
16 @Override
17 public String toString() {
18 return "Cerc [raza=" + raza + ", x=" + x + ", y=" + y + "]";
19 }
20 @Override
21 public double aria() {
22 return java.lang.Math.PI * raza * raza;
23 }
24 @Override
25 public double perimetrul() {
26 return 2 * java.lang.Math.PI * raza;
27 }
28
29 public double getRaza() {
30 return raza;
31 }
32 public void setRaza(double raza) {
33 this.raza = raza;
34 }
35

3 of 15 7/12/23, 07:37
Clase abstracte si interfete Java – UNCODED https://uncoded.ro/clase-abstracte-si-interfete-java/

36 }

Cerc.java hosted with by GitHub

view raw

Subclasele concrete (Cerc, Dreptunghi) ofera implementari proprii ale metodelor abstracte, aria()
si perimetrul(), declarate in superclasa ObiectGra�c.

1 package ro.virtualcampus.obiectgrafic;
2
3 public class Dreptunghi extends ObiectGrafic {
4
5 protected double lungime, latime;
6
7 public Dreptunghi(double lungime, double latime) {
8 super();
9 this.lungime = lungime;
10 this.latime = latime;
11 }
12 public Dreptunghi(double x, double y, double lungime, double latime) {
13 super(x, y);
14 this.lungime = lungime;
15 this.latime = latime;
16 }
17
18 @Override
19 public String toString() {
20 return "Dreptunghi [lungime=" + lungime + ", latime=" + latime
21 + ", x=" + x + ", y=" + y + "]";
22 }
23 @Override
24 public double aria() {
25 return lungime * latime;
26 }
27 @Override
28 public double perimetrul() {
29 return 2 * (lungime + latime);
30 }
31
32 public double getLungime() {
33 return lungime;
34 }
35 public void setLungime(double lungime) {
36 this.lungime = lungime;
37 }

4 of 15 7/12/23, 07:37
Clase abstracte si interfete Java – UNCODED https://uncoded.ro/clase-abstracte-si-interfete-java/

38 public double getLatime() {



39 return latime; 
40 }
41 public void setLatime(double latime) {
42 this.latime = latime;
43 }
44
45 }

Dreptunghi.java hosted with by GitHub view raw

1 package ro.virtualcampus.obiectgrafic;
2
3 public class Patrat extends Dreptunghi {
4
5 public Patrat(double latura) {
6 super(latura, latura);
7 }
8 public Patrat(double x, double y, double latura) {
9 super(x, y, latura, latura);
10 }
11
12 @Override
13 public String toString() {
14 return "Patrat [lungime=" + lungime + ", latime=" + latime
15 + ", x=" + x + ", y=" + y + "]";
16 }
17
18 }

Patrat.java hosted with by GitHub view raw

Instantierea de obiecte gra�ce de tip Cerc, Dreptunghi sau Patrat este realizata in clasa
principala a aplicatiei, clasa care contine metoda main(). Metodele toString() sunt utilizate
pentru a de�ni informatii de tip sir de caractere cu privire la o clasa. Implicit, aceste metode
a�seaza numele claselor si un cod unic asociat acestora.

1 package ro.virtualcampus.app;
2
3 import ro.virtualcampus.obiectgrafic.Cerc;
4 import ro.virtualcampus.obiectgrafic.Dreptunghi;
5 import ro.virtualcampus.obiectgrafic.Patrat;
6

5 of 15 7/12/23, 07:37
Clase abstracte si interfete Java – UNCODED https://uncoded.ro/clase-abstracte-si-interfete-java/

7 public class ObiecteGrafice {


8 
9 public static void main(String args[]) {
10 Cerc cerc = new Cerc(2.3, 3.4, 1.5);
11 Dreptunghi dreptunghi = new Dreptunghi(5.2, 1.8, 3.4, 4.8);
12 Patrat patrat = new Patrat(1.3, 2.6, 4.6);
13
14 System.out.println(cerc);
15 System.out.println(dreptunghi);
16 System.out.println(patrat);
17
18 System.out.printf("Aria cerc: %.2f %n", cerc.aria());
19 System.out.printf("Perimetru cerc: %.2f %n", cerc.perimetrul());
20 System.out.printf("Aria dreptunghi: %.2f %n", dreptunghi.aria());
21 System.out.printf("Perimetru dreptunghi: %.2f %n", dreptunghi.perimetrul());
22 System.out.printf("Aria patrat: %.2f %n", patrat.aria());
23 System.out.printf("Perimetru patrat: %.2f %n", patrat.perimetrul());
24 }
25
26 }

ObiecteGrafice.java hosted with by GitHub view raw

Cerc [raza=1.5, x=2.3, y=3.4]


Dreptunghi [lungime=3.4, latime=4.8, x=5.2, y=1.8]
Patrat [lungime=4.6, latime=4.6, x=1.3, y=2.6]
Aria cerc: 7.07
Perimetru cerc: 9.42
Aria dreptunghi: 16.32
Perimetru dreptunghi: 16.40
Aria patrat: 21.16
Perimetru patrat: 18.40

Crearea si utilizarea interfetelor


In limbajul Java, interfetele ofera raspuns lipsei mostenirii multiple. O interfata creeaza un
protocol pe care clasele trebuie sa il implementeze. Folosind interfete, poate � precizat pentru o
clasa ce sa implementeze, dar nu si cum sa faca acest lucru.

Interfetele reprezinta constructii Java similare claselor abstracte. Ele pot contine declaratii de

6 of 15 7/12/23, 07:37
Clase abstracte si interfete Java – UNCODED https://uncoded.ro/clase-abstracte-si-interfete-java/

constante si metode fara implementare. Dupa de�nire, o interfata poate � implementata de un


 
numar nede�nit de clase. De asemenea, o clasa poate implementa oricate interfete doreste.

Pentre a implementa o interfata, o clasa trebuie sa ofere implementare tuturor metodelor


de�nite in interiorul interfetei respective. Nu prezinta importanta modul in care metodele vor �
implementate in clasa.

De�nirea unei interfete se realizeaza in mod similar cu cea a unei clase, prin intermediul
cuvantului cheie interface.

[modificatori] interface nume_interfata [extends lista_super_interfete] {


// declaratii metode abstracte
// declaratii constante
}

Dupa cum se poate observa, o interfata poate mosteni una sau mai multe superinterfete.

In declaratia unei interfete poate � utilizat doar modi�catorul public. Toate atributele de�nite in
interiorul unei interfete sunt implicit constante, chiar daca nu sunt declarate folosind
modi�catorii static si �nal. Este obligatorie initializarea acestor atribute de tip constanta.
Metodele declarate intr-o interfata sunt implicit de�nite cu modi�catorii abstract si public.

Pentru a preciza faptul ca o clasa implementeaza una sau mai multe interfete este utilizata
clauza implements in declaratia clasei.

[modificatori_clasa] class nume_clasa [extends super_clasa][implements lista_interfe


// corp clasa
}

In cazul in care se doreste veri�carea tipului unui obiect, poate � utilizat operatorul instanceof.
De asemenea, instanceof poate testa si daca o variabila refera un obiect a carei clasa
implementeaza o interfata.

7 of 15 7/12/23, 07:37
Clase abstracte si interfete Java – UNCODED https://uncoded.ro/clase-abstracte-si-interfete-java/

Sintaxa generala de utilizare a operatorului instanceof este urmatoarea:


 

referinta_obiect instanceof nume_clasa

In cele ce urmeaza consideram clasele (concrete) Persoana si Student, si interfetele


IPoateEvalua si IPoateFiEvaluat. Interfata IPoateEvalua declara metoda abstracta evalueaza(), in
timp ce interfata IPoateFiEvaluat introduce metoda esteEvaluat(). Deoarece clasa Persoana
implementeaza interfetele, ea este obligata sa asigure implementare pentru metodele declarate
in aceaste interfete.

1 package ro.virtualcampus.eval;
2
3 public interface IPoateEvalua {
4
5 void evalueaza();
6
7 }

IPoateEvalua.java hosted with by GitHub view raw

1 package ro.virtualcampus.eval;
2
3 public interface IPoateFiEvaluat {
4
5 void esteEvaluat();
6
7 }

IPoateFiEvaluat.java hosted with by GitHub view raw

Clasele concrete de�nite in aceasta aplicatie ofera propriile implementari ale metodelor
declarate la nivelul interfetelor IPoateEvalua si IPoateFiEvaluat.

1 package ro.virtualcampus.person;
2
3 import ro.virtualcampus.eval.IPoateEvalua;
4 import ro.virtualcampus.eval.IPoateFiEvaluat;
5
6 public class Persoana implements IPoateEvalua, IPoateFiEvaluat {
7

8 of 15 7/12/23, 07:37
Clase abstracte si interfete Java – UNCODED https://uncoded.ro/clase-abstracte-si-interfete-java/

8 protected static int nrPersoane = 0;


9 
10 protected String nume;
11 protected int varsta;
12
13 public Persoana() {
14 nrPersoane++;
15 this.nume = "necunoscut";
16 this.varsta = 0;
17 }
18 public Persoana(int varsta) {
19 this();
20 this.varsta = varsta;
21 }
22 public Persoana(String nume, int varsta) {
23 nrPersoane++;
24 this.nume = nume;
25 this.varsta = varsta;
26 }
27
28 public static int getNrPersoane() {
29 return nrPersoane;
30 }
31
32 public void setNume(String nume) {
33 this.nume = nume;
34 }
35 public String getNume() {
36 return nume;
37 }
38 public void setVarsta(int varsta) {
39 this.varsta = varsta;
40 }
41 public int getVarsta() {
42 return varsta;
43 }
44
45 @Override
46 public String toString() {
47 return "Persoana [nume=" + nume + ", varsta=" + varsta + "]";
48 }
49 @Override
50 public void esteEvaluat() {
51 System.out.println(String.format("Persoana %s este evaluata.", getNume()));
52 }

9 of 15 7/12/23, 07:37
Clase abstracte si interfete Java – UNCODED https://uncoded.ro/clase-abstracte-si-interfete-java/

53 @Override

54 public void evalueaza() { 
55 System.out.println(String.format("Persoana %s evalueaza.", getNume()));
56 }
57
58 }

Persoana.java hosted with by GitHub view raw

1 package ro.virtualcampus.unit;
2
3 public class Facultate {
4
5 private String nume;
6 private String adresa;
7
8 public Facultate(String nume, String adresa) {
9 this.nume = nume;
10 this.adresa = adresa;
11 }
12
13 public String getNume() {
14 return nume;
15 }
16 public void setNume(String nume) {
17 this.nume = nume;
18 }
19 public String getAdresa() {
20 return adresa;
21 }
22 public void setAdresa(String adresa) {
23 this.adresa = adresa;
24 }
25
26 @Override
27 public String toString() {
28 return "Facultate [nume=" + nume + ", adresa=" + adresa + "]";
29 }
30
31 }

Facultate.java hosted with by GitHub view raw

1 package ro.virtualcampus.person;
2

10 of 15 7/12/23, 07:37
Clase abstracte si interfete Java – UNCODED https://uncoded.ro/clase-abstracte-si-interfete-java/

3 import ro.virtualcampus.unit.Facultate;
4 
5 public class Student extends Persoana {
6
7 private Facultate facultate;
8 private int anStudiu;
9
10 public Student(String nume, int varsta, Facultate facultate, int anStudiu) {
11 super(nume, varsta);
12 this.facultate = facultate;
13 this.anStudiu = anStudiu;
14 }
15
16 public Facultate getFacultate() {
17 return facultate;
18 }
19 public void setFacultate(Facultate facultate) {
20 this.facultate = facultate;
21 }
22 public int getAnStudiu() {
23 return anStudiu;
24 }
25 public void setAnStudiu(int anStudiu) {
26 this.anStudiu = anStudiu;
27 }
28
29 @Override
30 public String toString() {
31 return "Student [facultate=" + facultate + ", anStudiu=" + anStudiu
32 + ", nume=" + nume + ", varsta=" + varsta + "]";
33 }
34 @Override
35 public void esteEvaluat() {
36 System.out.println(String.format("Studentul %s este evaluat.", getNume()));
37 }
38 @Override
39 public void evalueaza() {
40 System.out.println(String.format("Studentul %s evalueaza.", getNume()));
41 }
42
43 }

Student.java hosted with by GitHub view raw

Clasa principala a aplicatiei Evaluari include declararea unor tablouri de tipul Student si

11 of 15 7/12/23, 07:37
Clase abstracte si interfete Java – UNCODED https://uncoded.ro/clase-abstracte-si-interfete-java/

IPoateFiEvaluat, denumite studenti, respectiv evaluati. Aceste tablouri contin elemente/obiecte


 
de tipul Student si/sau Persoana. Dupa instantierea obiectelor este apelata metoda esteEvaluat()
pentru elementele tablourilor. Parcurgerea elementelor tablourilor este realizata prin
intermediul unor iteratii for.

1 package ro.virtualcampus.app;
2
3 import ro.virtualcampus.unit.Facultate;
4 import ro.virtualcampus.eval.IPoateEvalua;
5 import ro.virtualcampus.eval.IPoateFiEvaluat;
6 import ro.virtualcampus.person.Persoana;
7 import ro.virtualcampus.person.Student;
8
9 public class Evaluari {
10
11 public static void main(String[] args) {
12 Facultate etti = new Facultate("ETTI", "Vasile Parvan nr. 2");
13
14 Student studenti[] = new Student[2];
15 studenti[0] = new Student("Dorina Goia", 23, etti, 2);
16 studenti[1] = new Student("Irina Popescu", 24, etti, 3);
17 for(Student student: studenti)
18 student.esteEvaluat();
19
20 IPoateFiEvaluat evaluati[] = new IPoateFiEvaluat[3];
21 evaluati[0] = studenti[0];
22 evaluati[1] = studenti[1];
23 evaluati[2] = new Persoana("Virgil Ionescu", 34);
24 for(IPoateFiEvaluat evaluat: evaluati)
25 evaluat.esteEvaluat();
26
27 System.out.println((evaluati[1] instanceof IPoateEvalua)?
28 String.format("%s poate evalua.", ((Student) evaluati[1]).getNume()):
29 String.format("%s nu poate evalua.", ((Student) evaluati[1]).getNume()));
30 }
31
32 }

Evaluari.java hosted with by GitHub view raw

Studentul Dorina Goia este evaluat.


Studentul Irina Popescu este evaluat.

12 of 15 7/12/23, 07:37
Clase abstracte si interfete Java – UNCODED https://uncoded.ro/clase-abstracte-si-interfete-java/

Studentul Dorina Goia este evaluat.


Studentul Irina Popescu este evaluat.

Persoana Virgil Ionescu este evaluata.
Irina Popescu poate evalua.

1
SHARES  SHARE 1  TWEET  MAIL  SHARE  SHARE

TAGS
#ABSTRACT #EXTENDS #IMPLEMENTS #INTERFACE #JAVA

JAVA , PROGRAMARE

Ierarhii de clase Java


AIRMAN · OCTOBER 12, 2019

VEZI ARTICOL

JAVA , PROGRAMARE

Utilizarea pachetelor de clase in Java


AIRMAN · OCTOBER 18, 2019

VEZI ARTICOL

ARTICOLE SIMILARE

13 of 15 7/12/23, 07:37
Clase abstracte si interfete Java – UNCODED https://uncoded.ro/clase-abstracte-si-interfete-java/

 

JAVA, PROGRAMARE JAVA, PROGRAMARE

Ierarhii de clase Java Clase Java


AIRMAN · OCTOBER 12, 2019 AIRMAN · SEPTEMBER 25, 2019

LEAVE A REPLY

YOUR EMAIL ADDRESS WILL NOT BE PUBLISHED. REQUIRED FIELDS ARE MARKED *

COMMENT *

NAME *

EMAIL *

WEBSITE

SAVE MY NAME, EMAIL, AND WEBSITE IN THIS BROWSER FOR THE NEXT TIME I COMMENT.

POST COMMENT

14 of 15 7/12/23, 07:37
Clase abstracte si interfete Java – UNCODED https://uncoded.ro/clase-abstracte-si-interfete-java/

 

TERMENI SI CONDITII CONFIDENTIALITATE

© 2018 VIRTUALCAMPUS.RO

15 of 15 7/12/23, 07:37

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