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:
- Ime konstruktora mora biti isto kao ime njegove klase
- Konstruktor ne smije vraćati nikakav određeni tip (čak ni void)
Tipovi konstruktora
Postoje dva tipa konstruktora:
- Podrazumijevani (default, no-arg) konstruktor
- 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 Student 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 |
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:
- Pomoću konstruktora
- Dodjeljivanjem vrijednosti jednog objekta drugom
- Pomoću metode clone() iz klase Object
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(Student 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.