Konstruktor

Iz MaFiRaWiki

Ta članek ali del članka je v delu. Veseli bomo, če ga boste dopolnili in popravili.

Kaj pomeni to opozorilo?


Vsebina

Opis

Konstruktor pri podatkovnih strukturah je operacija, ki iz podatkov preprostejših podatkovnih tipov sestavi sestavljen podatek. Nima tipa (tudi void ne) in nima stavka return.

Konstruktor kličemo z ukazom new.

 Kompleksno k = new Kompleksno();

Java najprej naredi nov objekt, nato pa pokliče konstruktor.

Konstruktor je posebna metoda, ki ima enako ime kot je ime razreda. Znotraj konstruktorja se pravkar narejeni objekt imenuje this. Namen konstruktorja je, da nastavi vrednosti komponent objekta. Izvede se ob deklaraciji razredov.

  1. public class Kompleksno{
  2. private double realno;
  3. private double imaginarno;
  4. //KONSTRUKTOR
  5. public Kompleksno(double x, double y){
  6. this.realno = x;
  7. this.imaginarno = y;
  8. }
  9. }

Če konstruktorja ne napišemo ga naredi prevajalnik sam (a metoda ne naredi nič).

public Kompleksno(){
}

Ločimo osnovni konstruktor (brez parametrov) in dodatne konstruktorje. Lahko jih imamo več znotraj enega razreda, vendar se morajo razlikovati v imenu in v podpisu. Če bi uporabniku radi ponudili več možnosti začetnega objekta, govorimo o več konstruktorjih (preobteževanje).

Konstruktorjev ne moremo klicati posebej (kot ostale metode), le ko ustvarimo nov objekt. New ustvari objekt nekje v pomnilniku. Ta objekt si zapomnimo kje je in nad njim izvedemo stavke, kot jih predpisuje posamezen konstruktor.

Vrste konstruktorjev

- javni konstruktor

Ključna beseda je public, različni razredi lahko dostopajo do tega konstruktorja.

Primer:

  1. public Kompleksno(){
  2. this.realno = 2.0;
  3. this.imaginarno = 1.0;
  4. }

- privatni konstruktor

Ključna beseda je private, nihče ne more zunaj razreda dostopati, do tega konstruktorja (nihče ne more narediti kopije razreda).

Primer:

  1. private Kompleksno(){
  2. this.realno = 2.0;
  3. this.imaginarno = 1.0;
  4. }

- zaščitniški konstruktor

Ključna beseda je protected, uporabijo ga lahko le podrazredi razreda.

Primer:

  1. protected Kompleksno(){
  2. this.realno = 2.0;
  3. this.imaginarno = 1.0;
  4. }

Konstruktorji in dedovanje

Pri klicu konstruktorjev se vedno najprej pokliče konstruktor razreda "očeta", torej razreda, iz katerega je trenutni razred izpeljan. Privzeto se pokliče konstruktor brez parametrov, pokliče se z super(). Če pa želimo, da se pokliče konstruktor z parametri, moramo uporabiti besedo super(...).

Primer: Imamo razred Lik, ki je abstrakten. Razred Lik je nadrazred razreda Krog. Torej razred Krog razširja razred Lik, je podrazred razreda Lik. Več o dedovanju: glej Dedovanje

  1. public abstract class Lik{
  2. private double x;
  3. private double y;
  4. //Konstruktor
  5. public Lik(double a, double b){
  6. this.x = a;
  7. this.y = b;
  8. }
  9. }
  10.  
  11. public class Krog extends Lik{
  12. private double polmer;
  13.  
  14. //konstruktor v podrazredu
  15. public Krog(double a, double b, double r){
  16. super(a,b); //pokliče se konstruktor z 2-ma parametroma iz nadrazreda
  17. this.polmer = r;
  18. }
  19. }

Primer

V primeru je prikazana uporaba več konstruktorjev hkrati, ki se razlikujejo v parametrih (različno število parametrov in različni tipi).

  1. public class Knjiga {
  2. //komponente
  3. public String naslov;
  4. public String avtor;
  5. public int leto_izdaje;
  6. public int cena;
  7.  
  8. //konstruktorji
  9. public Knjiga() {
  10. this.naslov = "Nedolocen"; //vse knjige imajo na začetku naslov Nedolocen
  11. this.avtor = "Nedolocen"; //vse knjige imajo na zacetku avtorja Nedolocen
  12. this.leto_izdaje = 1990; //vsem knjigam na začetku določim enako leto izdaje
  13. this.cena = 3000; //vsem knjigam na začetku določim enako ceno (3000 SIT)
  14. }
  15. public Knjiga(String naslovKnjige){
  16. this(); //poklicem konstruktor Knjiga()
  17. this.naslov = naslovKnjige;
  18. }
  19.  
  20. public Knjiga(String naslovKnjige, String avtorKnjige){
  21. this(); //pokličem konstruktor Knjiga()
  22. this.naslov = naslovKnjige;
  23. this.avtor = avtorKnjige;
  24. }
  25. public Knjiga(String naslovKnjige, String avtorKnjige, intletoIzdajeKnjige){
  26. this(); //pokličem konstruktor Knjiga()
  27. this.naslov = naslovKnjige;
  28. this.avtor = avtorKnjige;
  29. this.leto_izdaje = letoIzdajeKnjige;
  30. }
  31. public Knjiga(String naslovKnjige,String avtorKnjige,
  32. int letoIzdajeKnjige, int cenaKnjige) {
  33. this(); //pokličem konstruktor Knjiga()
  34. this.naslov = naslovKnjige;
  35. this.avtor = avtorKnjige;
  36. this.leto_izdaje = letoIzdajeKnjige;
  37. this.cena = cenaKnjige;
  38. }
  39. }


Opis konstruktorjev v primeru

1.public Knjiga()

o Ta konstruktor nima nobenega parametra. S tem konstruktorjem nastavim komponentam (lastnostim knjige) začetne vrednosti, naprimer vsem knjigam nastavim enako ceno.

2.public Knjiga(String naslovKnjige)

o Ta konstruktor ima en parameter, ki je niz. S tem konstruktorjem nastavimo naslov knjige, ostale lastnosti pa ostanejo enake, kot sem na začetku določila v konstruktorju Knjiga().

3.public Knjiga(String naslovKnjige, String avtorKnjige)

o Ta konstruktor ima dva parametra, oba sta niza. S tem konstruktorjem nastavljamo naslov knjige in avtorja knjige, ostali dve lastnosti pa ostanejo enake, kot sem na začetku določila v konstruktorju Knjiga().

4.public Knjiga(String naslovKnjige, String avtorKnjige, int letoIzdajeKnjige)

o Ta konstruktor ima tri parametre. S tem konstruktorjem nastavimo začetne vrednosti naslovu, avtorju in leto izdaje, cena pa ostane enaka, kot sem jo navedla v konstruktorju Knjiga().

5.public Knjiga(String naslovKnjige, String avtorKnjige, int letoIzdajeKnjige, int cenaKnjige)

o Ta konstruktor ima 4 parametre. Nastavimo začetne vrednosti naslovu, avtorju, letu izdaje in ceni.


Testni program

  1. public class TestKnjiga {
  2. public static void main (String [] args){
  3. Knjiga k1 = new Knjiga("Pesmi"); /*poklice konstruktor z
  4. enim parametrom, ki ima za parameter niz, ostali podatki
  5. pa ostanejo enaki, kot sem jih nastavila v konstruktorju
  6. Knjiga(), ki je brez parametra*/
  7.  
  8. Knjiga k2 = new Knjiga("Pet prijateljev","Enid Blyton"); /*poklice
  9. se konstruktor, ki ima dva parametra, ostali podatki pa ostanejo
  10. enaki kot v konstruktorju Knjiga()*/
  11. Knjiga k3 = new Knjiga("Pikica in Toncek","Erich Kastner",2005);
  12. /*pokliče se konstruktor, ki ima 3 parametre, ostali podatki pa ostanejo enaki, kot v konstruktorju Knjiga()*/
  13. Knjiga k4 = new Knjiga("Bobi v Laškem ujetnistvu",
  14. "Manko Golar",1985,100);
  15. /*pokliče se konstruktor z 4 parametri.*/
  16. }
  17. }


Glej tudi

Osebna orodja