Documente Academic
Documente Profesional
Documente Cultură
ro/clase-abstracte-si-interfete-java/
JAVA , PROGRAMARE
1
SHARES SHARE 1 TWEET MAIL SHARE SHARE
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/
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 }
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/
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 }
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/
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/
De�nirea unei interfete se realizeaza in mod similar cu cea a unei clase, prin intermediul
cuvantului cheie interface.
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.
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/
1 package ro.virtualcampus.eval;
2
3 public interface IPoateEvalua {
4
5 void evalueaza();
6
7 }
1 package ro.virtualcampus.eval;
2
3 public interface IPoateFiEvaluat {
4
5 void esteEvaluat();
6
7 }
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/
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 }
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 }
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 }
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/
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 }
12 of 15 7/12/23, 07:37
Clase abstracte si interfete Java – UNCODED https://uncoded.ro/clase-abstracte-si-interfete-java/
1
SHARES SHARE 1 TWEET MAIL SHARE SHARE
TAGS
#ABSTRACT #EXTENDS #IMPLEMENTS #INTERFACE #JAVA
JAVA , PROGRAMARE
VEZI ARTICOL
JAVA , PROGRAMARE
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/
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/
© 2018 VIRTUALCAMPUS.RO
15 of 15 7/12/23, 07:37