5. Konstruktor u Javi


Konstruktor je specijalni tip metode koji se koristi da inicijalizuje objekt. Konstruktor se poziva u trenutku kreiranja objekta. On konstruiše vrijednosti, tj. obezbjeđuje podatke za objekt i otuda mu to ime.

Pravila za kreiranje konstruktora

U osnovi, postoje dva definisana pravila za konstruktore:

  1. Ime konstruktora mora biti isto kao ime njegove klase
  2. Konstruktor ne smije vraćati nikakav određeni tip (čak ni void)

Tipovi konstruktora

Postoje dva tipa konstruktora:

  1. Podrazumijevani (default, no-arg) konstruktor
  2. Parametrizovani konstruktor

1) Podrazumijevani konstruktor Ovaj konstruktor nema parametara, a njegova sintaksa je:

<ime_klase>(){}

Primjer 1: Kreiranje podrazumijevanog konstruktora u klasi Bike. On će biti pozvan u trenutku kreiranja objekta.

class Bike1{
  Bike1(){System.out.println("Bike je kreiran");}
  public static void main(String args[]){
  Bike1 b=new Bike1();
}
}

Ispis na ekranu: 
Bike je kreiran

Pravilo: Ako nema konstruktora u klasi, kompajler automatski kreira podrazumijevani konstruktor. Svrha postojanja podrazumijevanog konstruktora je da obezbijedi podrazumijevane (default) vrijednosti za objekt, napr. 0, null itd., u zavisnosti od tipa.

Primjer 2: Podrazumijevani konstruktor koji prikazuje podrazumijevane vrijednosti.

class Student3{  
int id;  
String name;  
  
void display(){System.out.println(id+" "+name);}  
public static void main(String args[]){  
  Student3 s1=new Student3();  
  Student3 s2=new Student3();  
  s1.display();  
  s2.display();  
}  
}

Ispis na ekranu:
0 null
0 null
Objašnjenje: U ovoj klasi nije kreiran nikakav konstruktor, tako da kompajler obezbjeđuje podrazumijevani konstruktor. Vrijednosti 0 i null je obezbijedio podrazumijevani konstruktor.

2) Parametrizovani konstruktor Ovaj konstruktor ima parametre i koristi se da obezbijedi različite vrijednosti za zasebne objekte.

Primjer 3: Kreiranje konstruktora klase Student4 koji ima dva parametra. Moguće je imati bilo koji broj parametara u konstruktoru.

class Student4{  
    int id;  
    String ime;  
      
    Student4(int i,String n){  
    id = i;  
    ime = n;  
    }  
    void display(){System.out.println(id+" "+ime);}  
   
    public static void main(String args[]){  
    Student4 s1 = new Student4(111,"Petar");  
    Student4 s2 = new Student4(222,"Marko");  
    s1.display();  
    s2.display();  
   }  
}

Ispis na ekranu:
111 Petar
222 Marko

Preopterećenje (overloading) konstruktora

Ovo je tehnika u Javi u kojoj klasa može imati bilo koji broj konstruktora koji se razlikuju u parametarskim listama. Kompajler pravi razliku između ovih konstruktora tako što uzima u obzir broj parametara u listi i njihov tip.

Primjer 4: Preopterećenje konstruktora

class Student5{  
    int id;  
    String ime;  
    int starost;  
    Student5(int i,String n){  
    id = i;  
    ime = n;  
    }  
    Student5(int i,String n,int a){  
    id = i;  
    ime = n;  
    starost=a;  
    }  
    void display(){System.out.println(id+" "+ime+" "+starost);}  
   
    public static void main(String args[]){  
    Student5 s1 = new Student5(111,"Petar ");  
    Student5 s2 = new Student5(222,"Marko",25);  
    s1.display();  
    s2.display();  
   }  
} 

Ispis na ekranu:
111 Petar 0
222 Marko 25

Razlika između konstruktora i metode


Konstruktor Metoda
Konstruktor se koristi da inicijalizuje stanje objekta Metoda se koristi da izrazi ponašanje objekta
Konstruktor ne smije imati return tip Metoda mora imati return tip
Konstruktor se poziva implicitno Metoda se poziva eksplicitno
Java kompajler obezbjeđuje podrazumijevani konstruktor ako nema konstruktora Metodu ne obezbjeđuje kompajler ni u kom slučaju
Ime konstruktora mora biti isto kao ime klase Ime metode može ali i ne mora biti isto kao ime klase

Napomena: Ponegdje se može naći u literaturi naziv instansna metoda za one metode u klasi koje nisu konstruktor.

Kopiranje vrijednosti jednog objekta u drugi (kao konstruktor kopije u C++)

Postoji mnogo načina za kopiranje vrijednosti jednog objekta u drugi. Neki od njih su:

Primjer 5: Kopiranje vrijednosti jednog objekta u drugi pomoću konstruktora.

class Student6{
    int id;
    String ime;
    Student6(int i,String n){
    id = i;
    ime = n;
    }
    
    Student6(Student6 s){
    id = s.id;
    ime =s.ime;
    }
    void display(){System.out.println(id+" "+ime);}
 
    public static void main(String args[]){
    Student6 s1 = new Student6(111,"Petar");
    Student6 s2 = new Student6(s1);
    s1.display();
    s2.display();
   }
}

Ispis na ekranu:
111 Petar
111 Petar

Primjer 6: Kopiranje vrijednosti jednog objekta u drugi dodjeljivanjem vrijednosti jednog objekta drugom . U ovom slučaju nema potrebe za kreiranjem konstruktora.

class Student7{
    int id;
    String ime;
    Student7(int i,String n){
    id = i;
    ime = n;
    }
    Student7(){}
    void display(){System.out.println(id+" "+ime);}
 
    public static void main(String args[]){
    Student7 s1 = new Student7(111,"Petar");
    Student7 s2 = new Student7();
    s2.id=s1.id;
    s2.ime=s1.ime;
    s1.display();
    s2.display();
   }
}

Ispis na ekranu:
111 Petar
111 Petar

Napomena: Konstruktor može izvršiti i druge zadatke osim inicijalizacije, kao što su kreiranje objekta, pozivanje metode itd. Bilo koja operacija se može izvršiti u konstruktoru kao i u metodi.


Zadaci iz ovog poglavlja    Objektno orijentisano programiranje u Javi    Index