Sisällys. 19. Olio-ohjelmointia Javalla. Yleistä. Olioiden esittely ja alustus



Samankaltaiset tiedostot
19. Olio-ohjelmointia Javalla 19.1

1. Omat operaatiot 1.1

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista

2. Olio-ohjelmoinista lyhyesti 2.1

4. Olio-ohjelmoinista lyhyesti 4.1

Sisällys. Metodien kuormittaminen. Luokkametodit ja -attribuutit. Rakentajat. Metodien ja muun luokan sisällön järjestäminen. 6.2

Sisällys. 6. Metodit. Oliot viestivät metodeja kutsuen. Oliot viestivät metodeja kutsuen

Oliot viestivät metodeja kutsuen

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma.

Sisältö. 2. Taulukot. Yleistä. Yleistä

Sisältö. 22. Taulukot. Yleistä. Yleistä

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2

4. Luokan testaus ja käyttö olion kautta 4.1

Lohkot. if (ehto1) { if (ehto2) { lause 1;... lause n; } } else { lause 1;... lause m; } 15.3

Sisällys. 15. Lohkot. Lohkot. Lohkot

Olion elinikä. Olion luominen. Olion tuhoutuminen. Olion tuhoutuminen. Kissa rontti = null; rontti = new Kissa();

Lohkot. if (ehto1) { if (ehto2) { lause 1;... lause n; } } else { lause 1;... lause m; } 16.3

9. Periytyminen Javassa 9.1

Olio-ohjelmointi Javalla

Metodit. Metodien määrittely. Metodin parametrit ja paluuarvo. Metodien suorittaminen eli kutsuminen. Metodien kuormittaminen

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

9. Periytyminen Javassa 9.1

7. Oliot ja viitteet 7.1

Sisällys. 16. Lohkot. Lohkot. Lohkot

Sisällys. 9. Periytyminen Javassa. Periytymismekanismi Java-kielessä. Periytymismekanismi Java-kielessä

5. HelloWorld-ohjelma 5.1

Java-kielen perusteet

Mikä yhteyssuhde on?

Metodien tekeminen Javalla

Javan perusteita. Janne Käki

Sisällys. 12. Näppäimistöltä lukeminen. Yleistä. Yleistä

Taulukot. Jukka Harju, Jukka Juslin

Sisällys. 9. Periytyminen Javassa. Periytymismekanismi Java-kielessä. Periytymismekanismi Java-kielessä

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

7. Näytölle tulostaminen 7.1

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++?

12. Javan toistorakenteet 12.1

Kompositio. Mikä komposition on? Kompositio vs. yhteyssuhde Kompositio Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma

on ohjelmoijan itse tekemä tietotyyppi, joka kuvaa käsitettä

5. HelloWorld-ohjelma 5.1

Luokat ja oliot. Ville Sundberg

Sisällys. 7. Oliot ja viitteet. Olion luominen. Olio Java-kielessä

8. Näppäimistöltä lukeminen 8.1

12. Näppäimistöltä lukeminen 12.1

Java-kielen perusteet

8. Näppäimistöltä lukeminen 8.1

Pakkauksen kokoaminen

Sisältö Yleistä. Esittely ja luominen. Alkioiden käsittely. Kaksiulotteinen taulukko. Taulukko metodin parametrina. Taulukko ja HelloWorld-ohjelma. Ta

ITKP102 Ohjelmointi 1 (6 op)

15. Ohjelmoinnin tekniikkaa 15.1

14. Hyvä ohjelmointitapa 14.1

20. Javan omat luokat 20.1

2. Lisää Java-ohjelmoinnin alkeita. Muuttuja ja viittausmuuttuja (1/4) Muuttuja ja viittausmuuttuja (2/4)

Sisällys. 20. Javan omat luokat. Java API. Pakkaukset. java\lang

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

// Tulostetaan double-tyyppiseen muuttujaan "hinta" tallennettu // kertalipun hinta ja vaihdetaan riviä. System.out.printf("%.1f euros.

14. Poikkeukset 14.1

Listarakenne (ArrayList-luokka)

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

Informaatioteknologian laitos Olio-ohjelmoinnin perusteet / Salo

Java-kielen perusteet

11. Javan toistorakenteet 11.1

12. Javan toistorakenteet 12.1

Rajapinta (interface)

11. Javan valintarakenteet 11.1

ITKP102 Ohjelmointi 1 (6 op)

15. Ohjelmoinnin tekniikkaa 15.1

Osoitin ja viittaus C++:ssa

Ohjelmointi 2 / 2010 Välikoe / 26.3

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

public static void main (String [] args)

Olio-ohjelmointi: Luokkien toteuttaminen. Jukka Juslin

ITKP102 Ohjelmointi 1 (6 op)

Ohjelmoinnin jatkokurssi, kurssikoe

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti:

Java-kielen perusteita

11. Javan valintarakenteet 11.1

Vertailulauseet. Ehtolausekkeet. Vertailulauseet. Vertailulauseet. if-lauseke. if-lauseke. Javan perusteet 2004

Harjoitus 4 (viikko 47)

Pakkauksen kokoaminen

13. Hyvä ohjelmointitapa (osa 1) 13.1

17. Javan omat luokat 17.1

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Taulukot & Periytyminen

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

KOHDELUOKAN MÄÄRITTELY

Harjoitus 5 (viikko 48)

Tietueet. Tietueiden määrittely

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

12. Monimuotoisuus 12.1

14. Poikkeukset 14.1

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

Rajapinnasta ei voida muodostaa olioita. Voidaan käyttää tunnuksen tyyppinä. Rajapinta on kuitenkin abstraktia luokkaa selvästi abstraktimpi tyyppi.

1 Tehtävän kuvaus ja analysointi

Sisällys. 11. Rajapinnat. Johdanto. Johdanto

16. Javan omat luokat 16.1

Sisällys. 11. Javan toistorakenteet. Laskurimuuttujat. Yleistä

Harjoitus 2 (viikko 45)

Toinen harjoitustyö. ASCII-grafiikkaa 2017

1. Olio-ohjelmointi 1.1

Transkriptio:

Sisällys 19. Olio-ohjelmointia Javalla Olioiden esittely ja alustus. Metodit Yleistä metodeista. Mihin metodeja tarvitaan? Metodien määrittely. Omat metodit: nimeäminen, paikka, kutsuminen, parametrit ja paluuarvo. Metodin kutsuminen yleisesti. Attribuutit. Rakentajat. 19.1 19.2 Yleistä Olio-ohjelmointia käsitellään hyvin yleisellä tasolla: Tarkastellaan vain yhtä luokkaa. Attribuutit sivuutetaan maininnalla. Keskitytään metodeihin. Aihepiiriin palataan tarkemmin kolmannessa periodissa järjestettävällä Olio-ohjelmoinnin perusteet (Oope, 5 op) -kurssilla. Olioiden esittely ja alustus Javan oliot eivät ole oliotyyppiä vaan viitetyyppisiä (tarkemmin luokkatyyppisiä) muuttujia. Luokkatyyppisiä muuttujia ei voi yleensä ottaen käsitellä kuten alkeistietotyyppisiä muuttujia. Viite osoittaa jonkin muistipaikan kautta varsinaiseen dataan keskusmuistissa. Tästä syystä luokkatyyppisen muuttujan esittely varaa muistia vain viitteen tallentamiseen, ei olion tietojen tallentamiseen. 19.3 19.4

Olioiden esittely ja alustus Olion tarvitsema muistitilavaraus tehdään alustuksen yhteydessä new-operaatiolla, joka palauttaa viitteen ja varaa keskusmuistista yhtenäisen muistialueen olion datalle. Yleisesti: tai LuokanNimi olionnimi; olionnimi = new LuokanNimi(); LuokanNimi olionnimi = new LuokanNimi(); Olion luominen Koira teukka = null; teukka teukka = new Koira(); teukka null olio Sijoituksen seurauksena teukka-viite viittaa samaan olioon kuin paluuarvona saatu viite. Olion viitteen esittely ja alustaminen tyhjäksi. olio Lauseke new Koira(); luo olion ja palauttaa paluuarvona olioon liittyvän tunnuksettoman viitteen. 19.5 19.6 Yleistä metodeista Metodi (method) on luokkaan ohjelmoitu operaatio. Metodi eristää jonkin luokan osan nimettyyn lohkoon. Metodia kutsutaan luokan ulkopuolelta metodin nimellä, pistenotaatiota käyttäen. Metodin tunnistaa suluista. Metodille voidaan tarjota tietoja eli parametreja. Esim. System.out.println("Moikka!"); int luku = In.readInt(); 19.7 Yleistä metodeista Metodikutsun kohdalla ohjelman suoritus siirtyy metodiin, josta palataan kutsukohtaa seuraavaan ohjelman vaiheeseen. Metodi voi muiden tekemiensä asioiden lisäksi palauttaa arvon. Metodin lohkossa esitellyt tunnukset eivät näy metodin ulkopuolelle. Metoditkaan eivät välttämättä näy luokan ulkopuolelle. 19.8

Mihin metodeja tarvitaan? Ohjelmassa toistuva toiminnallisuus voidaan sijoittaa metodiin, jolloin koodia ei tarvitse monistaa eri paikkoihin ja samalla koodin ylläpito helpottuu. Metodeilla pitkä ohjelma voidaan jakaa palasiin, jolloin koodia voi helpommin hallita, ymmärtää ja ylläpitää. (Modulaarinen ohjelmointi.) Mahdollistavat tiedonkätkennän. 19.9 Metodien määrittely Koostuu otsikkosta (signature) ja rungosta (body): // Otsikossa määreitä, metodin nimi ja parametrilista. määreet nimi(parametrilista) { // Runko on koottu lause (lohko), joka kirjoitetaan // luokkamäärittelyn sisään aina sulkeita käyttäen. Määreillä otetaan kantaa metodin näkyvyyteen ja sen mahdollisesti palauttamiin tietoihin. Parametrilista määrittelee metodille välitettävät tiedot. Lista pilkuin erotettuja parametrimäärittelyjä. Pelkillä suluilla ilmaistaan ettei metodille välitetä tietoja. 19.10 Metodien määrittely /* Tervehditään ohjelman käyttäjää. public static void tulostatervehdys() { /* Korottaa kantaluvun a potenssiin b. public static int laskepotenssi(int a, int b) { Parametrit ovat metodin lohkon tunnuksia: Nimetään ja esitellään kuten muuttujat. Toisinaan käytetään lyhyitä tunnuksia, koska parametreista kerrotaan otsikkoon liittyvässä kommentissa. Mikäli parametrilla ja metodin muuttujalla on sama nimi, tapahtuu nimikonflikti, eikä ohjelma käänny. 19.11 Metodien määrittely Metodin tyyppi voi olla mikä tahansa Javan tietotyyppi, jolloin metodi palauttaa arvon. void-määre tarkoittaa ettei paluuarvoa ole. Yleisimmät näkyvyysmääreet private ja public sopivat attribuuttien, metodien ja luokkien näkyvyyden asettamiseen. private-määritelty metodi (tai attribuutti) on yksityinen eli sitä voi käyttää vain luokan omissa metodeissa. public-määritelty metodi (tai attribuutti) ovat julkisia. Sitä voidaan käyttää pistenotaatiolla myös luokan ulkopuolelta. Yleensä metodit ovat julkisia ja attribuutit yksityisiä, jotta tiedonkätkennän periaate toteutuisi. 19.12

HelloWorld-ohjelma Jatketaan HelloWorld-ohjelman analyysiä. Aikaisemmilta luennoilta muistetaan, että ajokelpoisessa Java-ohjelmassa on oltava mainoperaatio eli niin sanottu pääohjelmametodi, main-metodin otsikon on oltava aina tietyn muotoinen, jotta ohjelman suoritus onnistuisi, main-metodi sijaitsee luokkamäärittelyn sisässä, main-metodin lohko sijaitsee luokan lohkon sisässä. HelloWorld-ohjelma public class HelloWorld { Nimi public static void main (String[] args) { System.out.println("Hello World!"); Määreet main-metodi on julkinen (public) eikä sillä ole paluuarvoa (void). main-metodia kutsutaan automaattisesti. Tästä nimitys pääohjelmametodi. Parametri(t) 19.13 19.14 Omat metodit: nimeäminen Metodit kuvaavat toimintoja tunnukset usein käskymuotoisia verbejä. Esim. public void hauku(string s) { public static void sayhello() { Tunnukset yleensä muuttujien tunnuksia pitempiä. Tunnus aloitetaan pienellä alkukirjaimella. Useasta sanasta koostuvassa tunnuksessa ensimmäinen sana pienellä ja muut isolla alkukirjaimella. (Yhdyssanat ovat poikkeus.) 19.15 Omat metodit: sayhello-metodi /* Tervehditään maailmaa * englanniksi. Huomaa static- * määre metodin otsikossa. public static void sayhello() { // Tekstiä näytölle. System.out.println("Hello World!"); Ennen oman metodin otsikkoa kirjoitetaan aina yleisluonteinen kommentti metodin tarkoituksesta sekä mahdollisista parametreista ja paluuarvoista. Oheinen metodi ei palauta arvoa (void-tyyppi). Metodille ei myöskään voi antaa parametreja (parametrilista on tyhjä). 19.16

Omat metodit: paikka luokassa Omat metodit: kutsuminen public class HelloWorld { /* Tervehditään maailmaa englanniksi. public static void sayhello() { System.out.println("Hello World!"); public static void main(string[] args) { // Kuinka sayhello voidaan suorittaa? Omat metodit kirjoitetaan Lakikurssilla samaan luokkaan kuin main-metodi. Otsikoihin on siksi muistettava liittää static-määre. Koodi ei käänny, jos static-määre puuttuu. public class HelloWorld { /* Tervehditään maailmaa englanniksi. public static void sayhello() { System.out.println("Hello World!"); public static void main(string[] args) { // Metodi suoritetaan metodikutsulla. sayhello(); 19.17 19.18 Omat metodit: kutsuminen Metodia kutsuttiin luokan sisällä toisesta metodista nimellä ilman pistenotaatiota. Metodille ei välitetty parametreja: Kutsulause koostuu metodin nimestä ja tyhjistä suluista. Suoritus palasi main-metodiin automaattisesti. Metodi ei palauttanut arvoa (void-tyyppi). Metodi olisi voitu sijoittaa myös main-metodin jälkeen. Metodeja ei siis ole pakko määritellä ennen kuin niitä kutsutaan. 19.19 Omat metodit: parametrit Metodeille välitettävät tiedot määritellään parametrilistan avulla. Esimerkiksi potenssin a b laskevan operaation otsikossa: public static int laskepotenssi(int a, int b) määritellään int-tyyppiset parametrit a ja b. Parametri saa arvonsa metodin kutsun yhteydessä. Oikea määrä oikean tyyppisiä arvoja oikeassa järjestyksessä. Edellä määriteltyä metodia kutsuttaessa on annettava kaksi inttyyppistä arvoa (myös byte- ja short-arvot käyvät) siten, että kantaluku on ensimmäinen arvo ja eksponentti toinen arvo. laskepotenssi(2, 3); // Kaksi potenssiin kolme. laskepotenssi(3, 2); // Kolme potenssiin kaksi. laskepotenssi(2.5, 2); // Virhe, 1. parametriarvo väärää tyyppiä. 19.20

Omat metodit: parametrit Parametriksi voidaan antaa arvo sellaisenaan (literaali), muuttuja, vakio tai lauseke. int kantaluku = 2, eksponentti = 3; laskepotenssi(kantaluku, eksponetti); short i = 10; laskepotenssi(i - 1, i + 1); Java luo parametrille annetusta arvosta kopion ja sijoittaa sen automaattisesti parametrin tunnukseen liittyväksi arvoksi (pass-by-value, call-by-value). Koska metodi käsittelee kopiota, eivät metodin saamaansa arvoon tekemät muutokset välity alkuperäiseen arvoon. Omat metodit: parametrit public class HelloWorld { /* Tervehditään maailmaa metodin * kutsujan antamalla viestillä. public static void say(string message) { System.out.println(message); public static void main(string[] args) { // Parametrille arvo metodikutsussa. String viesti = "Hello World!"; say(viesti); Otsikossa määritellään, että metodilla on Stringtyyppinen parametri. Metodille annetaan kutsuttaessa Stringtyyppinen muuttuja, jonka arvo "Hello World!" kopioidaan ja sijoitetaan parametrin arvoksi automaattisesti. 19.21 19.22 Omat metodit: parametrit Parametrien arvot on syytä tarkistaa metodin aluksi, jos tiedetään arvojen voivan olla virheellisiä, koska näin saadaan aikaiseksi vakaampia ohjelmia. Loogiset operaatiot ovat tarkistuksissa hyvin hyödyllisiä. Omat metodit: parametrit /* Tervehditään n (> 0) kertaa. public static void sayhello(int n) { // Tarkistuksella vältetään ikuinen silmukka. if (n > 0) // Tulostetaan tervehdyksiä silmukan avulla. for (int i = n; i > 0; i--) System.out.println("Hello World!"); 19.23 19.24

Omat metodit: parametrit /* Tulostaa näytölle annetulla merkillä n riviä korkean * ja m saraketta leveän suorakaiteen. public static void piirrasuorakaide(int n, int m, char merkki) { int i, j; // Parametrien oltava järkevät, jotta edes yritetään piirtämistä. if (n > 0 && m > 0) for (i = 0; i < n; i++) { // Tulostetaan n riviä. for (j = 0; j < m; j++) // Tulostetaan yksittäinen rivi System.out.print(merkki); // eli m merkkiä. System.out.println(); Omat metodit: arvon palauttaminen Metodin tyyppi määrää palauttaako metodi arvon vai ei. void-tyyppinen metodi ei palauta arvoa. Ohjelman suoritus palaa automaattisesti kutsupaikkaan, kun metodin viimeinen lause on suoritettu. Muun tyyppiset metodit palauttavat arvon return-lauseella. return-lause palauttaa ohjelman suorituksen kutsupaikkaan. Yleisesti: return arvo; Paluuarvo voidaan tallentaa normaaliin tapaan muuttujaan. Paluuarvon ja muuttujan tyyppien tulee olla yhteensopivat. 19.25 19.26 Omat metodit: arvon palauttaminen Esimerkiksi potenssin a b laskevan operaation otsikossa: public static int laskepotenssi(int a, int b) määritellään metodin tyypiksi int, jolloin metodin on aina palautettava return-lauseella int-tyyppinen arvo. Sijoitetaan eri tavoin kutsutun metodin paluuarvo muuttujaan: int kantaluku = 2, eksponentti = 3; short i = 10; int potenssi = laskepotenssi(2, 3); potenssi = laskepotenssi(kantaluku, eksponetti); potenssi = laskepotenssi(i - 1, i + 1); 19.27 max-metodi /* Palauttaa suurimman luvuista a, b ja c. public static int max(int a, int b, int c) { int m; if ((a > b) && (a > c)) m = a; else if (b > c) m = b; else m = c; return m; Parametrilistassa määritellään, että metodille on annettava kolme inttyyppistä arvoa. Arvojen järjestyksellä ei ole väliä. Metodi on int-tyyppinen. Metodissa on oltava arvon palauttava return-lause. 19.28

max-metodi /* Palauttaa suurimman luvuista a, b ja c. public static int max(int a, int b, int c) { if ((a > b) && (a > c)) return a; else if (b > c) return b; else return c; Tässä max-metodin versiossa arvo palautetaan jokaisessa päätöshaarassa saman tien. 19.29 max-metodin kutsuja main-metodista public static void main(string[] args) { int k = 1, l = 3, m = 2; // Parametriarvoiksi muuttujien arvot, paluuarvo muuttujaan. int n = max(k, l, m); System.out.println(n); // Parametriarvoina literaaleja ja muuttujan arvo. // Paluuarvo katoaa, koska sitä ei sijoiteta muuttujaan. max(111, 222, l); // Metodin paluuarvo annetaan toisen metodin parametriarvoksi. System.out.println(max(111, 222, 333)); 19.30 Metodin kutsuminen yleisesti Metodin kutsuminen olion kautta Luokan A metodeja voi kutsua kolmella tavalla: 1) Toisesta luokasta A-tyyppisen olion kautta. 2) Toisesta luokasta luokan A nimen avulla. 3) Luokan A toisista metodeista. Kohdissa 1 ja 2 voidaan ajatella abstraktisti, että ympäristöstä lähetetty viesti käynnistää metodin. Käytännössä metodin kutsuminen tapahtuu tutulla pistenotaatiolla. Omia metodeja kutsutaan Lakikurssilla vain kohdan 3 tavalla, koska kutsuminen luokan ulkopuolelta ei onnistu, kun käytettävissä on vain yksi itse kirjoitettu luokka. Yleisesti: olio.metodi(parametrit); missä parametrit ovat metodin parametrilistassa annettua tyyppiä olevia arvoja (literaaleja, vakioita, muuttujia jne.). Parametreja ei luonnollisesti anneta, jos metodin parametrilista on tyhjä. Esim. Koira hiski = new Koira(); hiski.hauku("räyh!"); 19.31 19.32

Metodin kutsuminen luokan kautta Yleisesti: Luokka.metodi(parametrit); missä parametrit ovat kuten edellä. Metodi on esiteltävä static-määreellä, jotta luokan nimellä kutsuminen onnistuisi. Tällaiset luokkametodit ovat hyödyllisiä, kun kootaan yhteen toimintoja, joiden käyttö sujuvampaa suoraan ilman olion esittelyä ja on tarpeen määritellä koko luokalle yhteisiä vakioita. Metodin kutsuminen luokan kautta Luokkametodit ovat tuttuja jo System- ja In-luokkien yhteydestä. Esim. double d = In.readDouble(); System.out.println( Testi ); Luokkametodeista voidaan kutsua vain toisia luokkametodeja. Tästä syystä main-metodin sisältävässä luokassa metodien (ja attribuuttien) esittelyihin on lisättävä static-määre. 19.33 19.34 Metodin kutsu lauseena ja lausekkeena Metodikutsu voi esiintyä joko yksittäisenä lauseena tai lausekkeen osana. Esim. System.out.println("Oikein!"); if (In.readInt() < 0) { Paluuarvollisten metodien kutsut ovat lausekelauseita. Esim. int n = max(1, 2, 3); // Lause max(1, 2, 3) + 4; // Lauseke Attribuutit Luokan lohkossa esiteltyjä muuttujia tai vakioita. Esitellään lähes samalla tavoin kuin "tavalliset" muuttujat tai vakiot. Lisänä määreet: Yleensä pyritään kätkemään luokan ympäristöltä private-määreellä. Luetaan ja muutetaan aksessorimetodeilla. Käytettävä varoen: näkyvät kaikkiin metodeihin ja rikkovat siten modulaarisuusperiaatetta. (Vakioituja attribuutteja voi käyttää vapaammin.) public class Koira { // Attribuutit. private int luonne; private String rotu; // Aksessorit. public int luonne() { return luonne; // Metodit. public void hauku(string s) { System.out.println(s); 19.35 19.36

Rakentajat Attribuuttien arvot alustetaan luokan rakentajassa (constructor), jonka nimi on aina sama kuin luokan nimi. Rakentajalla ei ole tyyppiä. Kutsu yleisesti: - Oletusrakentaja LuokanNimi(); tai - Parametrillinen rakentaja LuokanNimi(parametrit); Rakentajaa kutsutaan aina, kun luodaan olio. Esim. Koira hiski = new Koira(); Rakentajat Java luo automaattisesti tyhjän oletusrakentajan. Itse kirjoitetulle luokalle voidaan luonnollisesti kirjoittaa myös rakentaja. Entä jos olisi tarvetta sekä parametrittomalle oletusrakentajalle että parametriselle rakentajalle? Javassa on kuormittamisena (overloading) tunnettu mekanismi, joka sallii samannimisten metodien esittelyn ja siten myös samannimisen rakentajien esittelyn. 19.37 19.38