Elementele care constituie corpul unei clase

In corpul unei clase putem gasi declaratii de variabile, declaratii de constructori, declaratii de metode. Variabilele, metodele si constructorii unei clase se numesc membrii clasei.

Declararea variabilelor membre

Variabilele car sunt definite in interiorul unei clase dar in afara corpului unei metode se numesc variabile membre ale clasei.

nivelul_de_acces Nivelurile de acces sunt: private, protected, public si package (default). *
static Este o variabila de clasa si nu de instanta *
final Variabila nu se mai poate modifica dupa de a fost initializata. *
transient Nu este specificata complet in The Java Language Specification. La serializarea obiectelor se foloseste pentru a marca un membru care nu trebuie serializat. *
volatile Cuvantul cheie volatile este folosit pentru a impiedica compilatorul de a indeplini anumite optimizari asupra unui membru. Este folosit numai de catre foarte putini programatori Java.  *
tip numeVariabila  

Elementele noatate cu  * pot lipsi din declaratia unei variabile membru.

Declararea constructorilor

Toate clasele Java sunt prevazute cu constructori care sunt utilizati la initializarea unui nou obiect (In situatia in care programatorul nu declara o functie coinstructor limbajul Java asigura un constructor default care nu face nimic).Constructorii au aceeasi sintaxa ca si metodele dar se deosebesc de acestea prin aceea ca au exact acelasi nume ca si clasa din care fac parte. In exemplele urmatoare sunt declarate doua clase Point si Rectangle. Clasa Point are un singur constructor, iar clasa Rectangle declara 4 constructori.

public class Point {
    public int x = 0;
    public int y = 0;
	// un constructor
    public Point(int x, int y) {
	this.x = x;
	this.y = y;
    }
}
public class Rectangle {
    public int width = 0;
    public int height = 0;
    public Point origin;
	// four constructors
    public Rectangle() {
	origin = new Point(0, 0);
    }
    public Rectangle(Point p) {
	origin = p;
    }
    public Rectangle(int w, int h) {
	this(new Point(0, 0), w, h);
    }
    public Rectangle(Point p, int w, int h) {
	origin = p;
	width = w;
	height = h;
    }
	// o metoda pentru deplasarea dreptunghiului
    public void move(int x, int y) {
	origin.x = x;
	origin.y = y;
    }
	// o metoda pentru calculul ariei dreptunghiului
    public int area() {
	return width * height;
    }
	// o metoda speciala folosita pentru distrugerea 
	// referintelor catre obiectele create de clasa, 
	// element necesar pentru functionarea mecanismului 
	// de colectare a "gunoaielor" = obiecte inutile 
	// catre care nu mai exista nici o referinta
    protected void finalize() throws Throwable {
	origin = null;
	super.finalize();
    }
}

Functiile constructor admit urmatorii specificatori de acces:

Declararea metodelor

Metodele sunt acele elemente de limbaj care asigura functionalitatea obiectelor.

nivelul_de_acces Nivelurile de acces sunt: private, protected, public si package (default). *
static Este o metoda de clasa si nu de instanta *
abstract Aceasta metoda nu este implementata si trebuie sa fie membra a unei clase abstract. *
final Subclasele nu pot acoperi (suprapune) aceasta metoda. Adica nu se pot adauga sau sterge functionalitati folosind numele acestei metode. *
native Metoda implementata in alt limbaj. *
synchronized Metoda are nevoie de un moditor pentru a fi executata. Firele de executie distincte concurente (ce folosesc metode specializate) pot avea nevoie sa opereze  la un moment dat asupra unor date comune. Pentru ca lucrurile sa se desfasoare in siguranta trebuie ca aceste metode sa fie declarate synchronized. *
tipReturnat numeMetoda Tipul returnat si numele metodei.
(lista parametrii) lista parametrilor foloseste delimitatorul ,
throws Exceptii Exceptiile generate de metoda. *
{  
   Corpul metodei  
}  

Valorile returnate de metode

Valoarea returnata de o metoda se precizeaza cu instructiunea return. Instruciunea return are sintaxa:

return valoareReturnata;

sau

return expresie;

Tipul returnat trebuie sa fie compatibil cu tipul declarat prin tipReturnat. Tipul returnat poate fi unul dintre tipurile primitive sau un tip referinta. In ultima situatie se pot returna obiecte de exact tipul declarat sau obiecte care sunt descendente al obiectului declarat in ierarhia obiectelor.

Numele metodelor

In interiorul aceleiasi clase pot exista mai multe metode cu acelasi nume. Spre exemplu sunt licite urmatoarele declaratii

class DataRenderer {
    void draw(String s) {
        . . .
    }
    void draw(int i) {
        . . .
    }
    void draw(float f) {
        . . .
    }
}

Compilatorul Java suporta suprapunerea numelor metodelor cu conditia ca lista de parametri sa fie diferita ca numar sau componenta a tipurilor. Spre exemplu nu se pot declara doua metode: draw(String s) si draw(String t), deoarece lista lor de parametrii este practic aceeasi.

Suprapunerea metodelor

O metoda poate suprapune (daca este permis acest lucru sau trebuie) o metoda a clasei antecedente in ierarhie.

Tipul returnat, numele metodei, numarul, tipul si ordinea parametrilor metodei acoperite si metodei care o acopera trebuie sa fie identice. 

 Un prin exemplu de metoda care suprapune este metoda finalize() folosita in clasa Rectangle. O subclasa trebuie neaparat sa suprapuna metodele declarate abstract. Nu poate fi suprapune o metoda declarata final.

Accesul la metoda acoperita se face folosind cuvantul cheie super.

Cornel Mironel Niculae, 2003-2007

26-Jun-2007