Sunteți pe pagina 1din 5

JAVA

Clasa normala, abstracta, derivare, generare metode, clone, compare, equal, fisiere,
server, xml* si bd*

Clasa simpla

public class Carte {

private String denumire;


private String autor;

Constructor (se genereaza automat de catre compilator, dar in poo il faci tu de


mana[de 2 feluri: fara parametrii = preia datele defaul date de tine de fiecare data
cand il folosesti altundeva; cu parametrii = cand il folosesti undeva ii dai tu ce date
vrei sa ia obiectele din el]).

Fara parametrii
public Carte() {

denumire = "Anonim";
autor = "Anonim";
}

Cu parametrii
public Carte(String denumire, String autor) {
super();
this.denumire = denumire;
this.autor = autor;

In Main asta e instantierea clasei cu constructorul fara parametrii

Carte a = new Carte();

//si pentru a afisa continutul apelam toString (explicatia la toString() mai jos, sa
fii atenta la paranteze toString() )

System.out.println(a.toString());

Constructorul cu parametrii

Carte a = new Carte("Ion","Liviu Rebreanu);


System.out.println(a. toString ());

In caz ca iti cere sa arunci o exceptie in constructor (in cel cu parametrii), de


exemplu pretul e mai mic ca 0 si nu ar avea logica sa ai valori negative
(logic nu? ;)))

Exceptia ar arata in genu. Posibil sa te puna sa iti faca automat compilatorul cu try
& catch

if(pret <0) throw new Exception("pretul e mai mic ca 0");

Get & set (generati de asemenea automat de program)


public String getDenumire() {
return denumire;
}

public void setDenumire(String denumire) {


this.denumire = denumire;
}

Interfata (in loc sa dai new class dai new interface) diferenta fata de clasa abstracta
este ca poate sa fie folosita oriunde, metodele ei sunt intotdeauna publice
public interface ILibrarie {

// aici puteam sa scriem si alte elemente gen atribute


public String detalii();

Implementarea interfetei se face in clasa in care se doreste sa fie folosita, de


exemplu pt metoda de mai sus "detalii". O sa observi ca atunci cand scrii
implementarea compilatorul o sa iti zica sa faca automat override-ul (adica
suprascrierea metodei din interfata)
public class Carte implements ILibrarie //implementare

@Override
public String detalii() {
// TODO Auto-generated method stub
return "Cartea " + denumire + " este scrisa de :" + autor;
}

Acuma in functie de ce vrea metoda ta ii faci suprascrierea. Mai sus in interfata


aveam un String dar poate sa fie si void sau float, binar etc, (la unele la crearea
in interfata o sa-ti ceara return sau parametrii)

Daca in cerinta iti cere sa returnezi un atribut care este float in clasa principala
automat metoda din interfata o sa fie float si ii dai un element care trb returneze.
(public float marime(float x); si in suprascriere o sa fie ceva in genu:

@Override
public String marime(float greutate){
// TODO Auto-generated method stub
return greutate;
}

Dupa suprascriere pt a folosii aceasta metoda se creaza un now obiect si se apleaza


cu el (adica una bucata constructor cu parametriis sau fara )

a.marime(float greutate);

Clasa abstracta (de regula folosita pt derivare. Abstract inseamna ca nu poate fi


instantiata si aceasta poate contine sau nu metode abstracte. O metoda abstracta nu
este implementata in clasa abstracta, ea fiind suprascrisa ulterior. In interfata
aveam o metoda in care puteam direct acolo sa ii scriu ceva continut in interfata, in
cazul de fata numai in clasa derivata) De asemenea in clasa abstracta aveam
elemente ca in orice clasa + constructor + optional get si set.
Daca cumva iti cere implementarea unei metode abstracte si nu specifica daca si
clasa sa fie abstracta, ea neaparat trb sa fie (clasa)
public abstract class Librarie {

protected float pret;


protected String disponibilitate;

public Librarie(){
pret = 10;
disponibilitate= "in stoc";

public abstract void detaliiTotale (); //metoda abstracta

Clasa deriveaza o abstracta prin EXTENDS si aici de obiecei zice compilatorul sa


implementeze el constructorul pt derivata automat.

public class Carte extends Librarie

Abstract vs Interfata

Which should you use, abstract classes or interfaces?

 Consider using abstract classes if any of these statements apply to your situation:
o You want to share code among several closely related classes.
o You expect that classes that extend your abstract class have many common methods or
fields, or require access modifiers other than public (such as protected and private).
o You want to declare non-static or non-final fields. This enables you to define methods
that can access and modify the state of the object to which they belong.
 Consider using interfaces if any of these statements apply to your situation:
o You expect that unrelated classes would implement your interface. For example, the
interfaces Comparable and Cloneable are implemented by many unrelated classes.
o You want to specify the behavior of a particular data type, but not concerned about who
implements its behavior.
o You want to take advantage of multiple inheritance of type.

Metoda toString cam trb sa o faci mereu la orice clasa (- abstracta si interfata)

ca sa poti afisa continutul respectivei clasa (mdaa ma repet). Ea e generata automat


de catre compilator.
Metoda CLONE ...asta e ce am eu de la Zamfiroiu, ea este o interfata (IClonable si
o cand scrii sus la clasa Implements IClonable iti subliniaza si se ofera sa ti-o faca
el singur (baiat bun compilatorul asta)).
@Override
protected Object clone() throws CloneNotSupportedException {
// TODO Auto-generated method stub
return new Carte(this.denumire, this.autor, this.pret, this.autor);
}

Nush cat e de corect da asta am eu din seminar...sper ca e deep copy, daca nu e


shallow mai mult ca sigur. Deep copy inseamna ca o sa-ti copieze si
continutul(obiecte identice) iar shallow copy iti copiaza numai adresa, adica face o
referire, adica e pointer :)) :X <3

Cam atat pt prima parte: urmeaza liste, scriere in fisiere, si ce mai e

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