Laborator8 - Java
Laborator8 - Java
SCOPUL LUCRRII
II.
NOIUNI TEORETICE
1. Clase abstracte
Vezi Curs 8, pentru consultarea noiunilor teoretice.
Cateodat avem nevoie s declarm o clas, dar nu tim cum s definim toate
metodele care aparin clasei. De exemplu, sa ncercm s declarm o clas numit
Mamifer n care s includem o metoda membru numit MarcheazaTeritoriul().
Oricum, nu tim cum s scriem MarcheazaTeritoriul() pentru ca aceasta se ntmpl
diferit n funcie de specia de Mamifer. Bineneles, o s rezolvm acest lucru derivnd
subclase din clasa Mamifer, clase cum ar fi Maimuta i Om. Dar ce cod s conin
funcia MarcheazaTeritoriul() din clasa Mamifer?
n Java funcia MarcheazaTeritoriul() se poate declara n clasa Mamifer ca
fiind o metod abstract. Fcnd aceasta se permite declararea metodei fr a scrie cod
pentru subclase. Se va scrie ns cod n subclase.
Dac o metod este declarat abstract, atunci i clasa trebuie declarat abstract.
Pentru Mamifer i subclasele sale, acest lucru nseamn c trebuie s arate dup cum
urmeaz:
abstract class Mamifer {
abstract void MarcheazaTeritoriul();
}
public class Om extends Mamifer {
public void MarcheazaTeritoriul() {
//cod prin care se marcheaza teritoriul construind un gard
}
}
1.1.
Tipic, o clas abstract va avea cteva metode declarate abstract i altele care nu
sunt declarate astfel. Dac se declar o clas care este n totalitate abstract, atunci se
declar ceea ce n Java este cunoscut sub numele de interfa. O interfa este o clas
abstract n ntregime. Se pot deriva clase dintr-o interfa ntr-o manier complet
analoag cu aceea a derivrii claselor din alte clase.
Ca exemplu, s presupunem c dezvoltm o aplicaie care trebuie s afieze ora.
Utilizatorii vor avea dou opiuni pentru a obine aceast informaie. Pot s o preia dintrun ceas electronic sau dintr-un ceas cu limbi. S-ar putea implementa ca mai jos:
interface Ceas {
public String CitesteTimpul(int ora);
}
class CeasCuLimbi implements Ceas {
public String CitesteTimpul(int ora) {
StringBuffer str = new StringBuffer();
for (int i=0; i < ora; i++)
str.append("CeasCuLimbi ");
return str.toString();
}
}
class CeasElectronic implements Ceas {
public String CitesteTimpul(int ora) {
return new String("Este ora " + hour + ":00");
}
}
folosit n cazul n care Ceas ar fi fost o clas abstract, este folosita sintaxa class
CeasCuLimbi implements Ceas.
Pentru c CeasCuLimbi implementeaz interfaa Ceas, ea furnizeaz o funcie
CitesteTimpul(). Clasa CeasElectronic implementeaz de asemenea Ceas i furnizeaz
o funcie CitesteTimpul().
Interfeele i superclasele nu se exclud reciproc. O clas nou poate fi derivat
dintr-o superclas i poate implementa una sau mai multe interfee. Acest lucru se poate
efectua ca mai jos, pentru o clas care implementeaz doua interfee i are o superclas:
class SubClasaMea extends SuperClasaMea implements
PrimaInterfata, ADouaInterfata
{
// implementarea clasei
}
III.
MODUL DE LUCRU
IV.
TEM