Sunteți pe pagina 1din 3

Programarea Orientată spre Obiecte, Limbajul Java, 2019 -2020 CEITI

Tema9. Clase abstracte.


Ce sunt clasele abstracte?
Definiție: O clasă abstractă este o clasă declarată abstract.
Clasa abstractă nu poate fi instanţiată, dar poate avea subclase. Se folosește atunci când dorim să
stabilim o interfață comună pentru a putea crea funcționalitate diferită pentru fiecare subtip şi
pentru a ști ce anume au clasele derivate în comun.
Deseori când lucrăm cu clasele derivate apare problema că pentru superclasă nu putem preciza
implementarea unei metode pentru că subclasele sale au nevoie de implementare specifică
fiecăreia. În acest caz pot fi utilizate clasele abstracte.
Java are clase abstracte predefinite. Una fiind clasa abstractă Number, ce se conţine în pachetul
java.lang. Această clasă abstractă descrie un număr la general, dar într-o aplicație avem nevoie
de număr de un anumit tip (întreg, real, ș.a). Fiecare tip de număr are caracteristicele sale însă
toate exprimă valori numerice, fiecare în felul său. Clasa abstractă Number servește ca superclasă
pentru clasele concrete Byte, Double, Float, Integer, Short şi Long , denumite și clase
Wrapper sau clase înfășurătoare.
Obiecte de tip Number nu putem instanţia, însă putem instanţia obiecte de tip Integer, Double,
Float.

Cum declarăm o clasă abstractă?


Sintaxa:
[public] abstract class numeClasaAbstracta
[ extends Superclasa ]
{
// declaratii de atribute si metode
}
1. Clasa abstractă nu conţine modificatorul final;
2. Clasa abstractă conţine metode abstracte, nu au implementare în clasa dată;
3. Clasa abstractă poate să nu aibă nici o metodă abstractă;
4. Clasa abstractă nu poate să fie instanţiată, în schimb poate avea orice număr de
subclase;
Rețineți !

5. Orice clasă ce are măcar o metodă abstractă trebuie să fie şi ea abstractă;


6. O clasă nu poate fi concomitent finală şi abstractă;
7. Subclasa unei clase abstracte trebuie să conțină cod pentru toate metodele abstracte
declarate în superclasa abstractă , în caz contrar subclasa trebuie să fie şi ea abstractă;
8. Clasa abstractă impune subclasele sale să implementeze metode comune şi le permite
să implementeze şi metode proprii;
9. Constructorii și câmpurile clasei nu pot fi abstract.

Ce sunt metodele abstracte


O metodă abstractă este o metodă fără implementare şi poate fi doar în corpul unei clase abstracte,
conţine obligatoriu cuvîntul rezervat abstract în semnătura acesteia.
Cum declarăm o clasă abstractă?

abstract tipMetoda numeMetoda ([lista_parametri_formali]);

opreavictoria86@gmail.com 1 © MUSTEAȚĂ Victoria


Programarea Orientată spre Obiecte, Limbajul Java, 2019 -2020 CEITI
Rețineți ! 1. Metodele abstracte conţin semnul ,,;’’ ce înlocuiește corpul metodei;
2. O metodă declarată public poate fi abstractă;
3. O metodă statică nu poate fi abstractă , pentru că nu poate fi rescrisă;
4. Metodele abstracte nu pot fi private pentru că scopul acestora este de a fi
implementate întro clasă copil.
Exemplu:
Creați un program Java format din:
1. clasa abstractă Figura care va conţine 2 metode publice abstracte fără parametri : double
Arie() şi double Perimetru().
2. clasa Cerc ce extinde clasa abstractă Figura şi va conţine variabila privată raza, constructorul
clasei cu un parametru, metodele Arie() şi Perimetru() implementate.
3. clasa Triunghi ce extinde clasa Figura şi conţine variabila privată latura, constructorul clasei cu
un parametru, metodele din Figura implementate.
4. clasa TestFigura.

abstract class Figura{


public abstract double Arie();
public abstract double Perimetru();
}
class Cerc extends Figura{
private double raza;
public Cerc(int raza){ this.raza = raza;}
public double Arie(){
return Math.PI*raza*raza;
}
public double Perimetru(){
return 2*Math.PI*raza;
}}
class Triunghi extends Figura{
private double latura;
public Triunghi(double latura){this.latura = latura;}
public double Arie(){
return Math.sqrt(3)/4*latura*latura;
}
public double Perimetru(){
return 3*latura;
}}

public class TestFigura {


public static void main(String[] args) {
System.out.println("-------------------------------------");
Cerc obCerc = new Cerc(3);
System.out.println("Aria cercului = "+obCerc.Arie());
System.out.println("Perimetru cercului"+obCerc.Perimetru());

System.out.println("-------------------------------------");
Triunghi obTriunghi = new Triunghi(5);
System.out.println("Aria triunghi = "+obTriunghi.Arie());
System.out.println("Perim. Triunghi "+obTriunghi.Perimetru());
}}

opreavictoria86@gmail.com 2 © MUSTEAȚĂ Victoria


Programarea Orientată spre Obiecte, Limbajul Java, 2019 -2020 CEITI
Exerciții
1. Analizați porțiunile de cod propuse și argumentați dacă sunt corecte sau nu. În caz că nu sunt
corecte explicați cum ați corecta eroarea depistată.

abstract class AbstractClass{


abstract void abstractMethod();
}
class ConcreteClass extends AbstractClass{
void abstractMethod(){
System.out.println("Abstract Method Implemented");
}}
class Abstraction{
public static void main(String[] args){
AbstractClass A = new AbstractClass();
ConcreteClass C = new ConcreteClass();
}}
class AbstractClass{
void abstractMethod();
abstract void abstractMethod();
}
abstract class AbstractClass{
void methodOne(){
}}
abstract class AbstractClass{
void methodOne(){
}
void methodTwo(){
}
abstract void methodThree();
abstract void methodFour();
}
abstract class AbstractClass{
private abstract void abstractMethodOne();
}
abstract class AbstractClass{
abstract int i;
abstract AbstractClass(){
}}
abstract class AbstractClass{
static abstract void abstractMethod();
}

Surse:
1. http://javaconceptoftheday.com/garbage-collection-finalize-method-java/
2. https://docs.oracle.com/javase/tutorial/java/IandI/abstract.html
3. https://www.javatpoint.com/abstract-class-in-java

Resurse:
Lecție video în care am explicat această temă:
1. https://youtu.be/LuDwTWfm3Uk -teorie
2. https://youtu.be/NjsevzVY6OE - exemplu practic

opreavictoria86@gmail.com 3 © MUSTEAȚĂ Victoria