Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Rakentaja | Luokat
Java Laajennettu
course content

Kurssisisältö

Java Laajennettu

Java Laajennettu

1. Syvällinen Java-rakenne
2. Metodit
3. Merkkijonon Jatkotaso
4. Luokat
5. Luokat Jatko

book
Rakentaja

Kuinka yksinkertaistaa luokan alustamista?

Jokaisen kentän alustaminen erikseen voi olla työlästä. Tätä varten luokilla on konstruktorit. Konstruktorin syntaksi on seuraava:

Main.java

Main.java

copy
1234
modifier ClassName(ParameterType parameter1, ParameterType parameter2) { this.parameter1 = parameter1; this.parameter2 = parameter2; }

Käydään läpi jokainen tässä mainittu sana:

  • modifier: Tämä viittaa näkyvyysmuuntimeen, joka on usein public konstruktoreille. Tapaukset, joissa konstruktorilla voi olla muu näkyvyysmuunnin, käsitellään erillisessä kurssissa;
  • ClassName: Tämä on yksinkertaisesti sen luokan nimi, johon olet luomassa konstruktorin;
  • ParameterType: Tämä on konstruktorissa käytettävän parametrin tyyppi. On tärkeää kiinnittää tähän huomiota, koska parametrin tulee olla samaa tyyppiä kuin luokan kenttä; Esimerkiksi: Jos luokalla on kaksi kenttää, String name ja int age, konstruktorilla tulisi olla samat parametrit (jos haluamme alustaa kaikki kentät konstruktorin kautta). Jos haluamme alustaa vain tietyn luokan kentän konstruktorin kautta, esimerkiksi name, silloin käytetään vain yhtä parametria, jolla on sama tyyppi ja nimi kuin luokan kentällä;
  • Seuraavaksi konstruktorin rungossa annetaan arvot luokan kentille parametrien avulla.

"this"-avainsana

this-avainsanan avulla voidaan viitata luokan kenttään siinä luokassa, jossa tätä avainsanaa käytetään. Esimerkiksi, kun luokassa on kaksi kenttää: name ja age, voidaan kirjoittaa this.name konstruktorissa tai metodissa, jolloin viittaus kohdistuu nimenomaan luokan kenttään, ei paikalliseen muuttujaan, joka on annettu konstruktorin tai metodin parametrina. Näin luokan kentät voidaan alustaa konstruktorissa seuraavalla syntaksilla: this.name = name;.

Esimerkki

Tarkastellaan esimerkkiä konstruktorista luokassa, jonka avulla kaikki kentät voidaan alustaa selkeyden vuoksi:

Person.java

Person.java

copy
1234567891011
class Person { String name; int age; String gender; public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } }

Meillä on luokka nimeltä Person, jossa on kolme kenttää. Jokainen näistä kentistä on lisätty konstruktoriin käyttäen this-avainsanaa. Näin konstruktori alustaa kentät parametrien arvoilla. Käytetään tätä konstruktoria main-metodissa, jotta näet, että kentät alustetaan niillä arvoilla, jotka annetaan parametreina:

Main.java

Main.java

copy
123456789101112131415161718192021
package com.example; class Person { String name; int age; String gender; public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } } public class Main { public static void main(String[] args) { Person bob = new Person("Bob", 20, "Male"); System.out.println("Bob's name: " + bob.name + ", Bob's age: " + bob.age + ", Bob's gender: " + bob.gender); } }

Alustimme Person-olion bob käyttämällä konstruktoria välittämällä name, age ja gender parametreina. Tämän jälkeen tulostimme sen parametrit näytölle ja huomasimme, että olion kenttien arvot vastaavat konstruktorin parametreja.

Konstruktorin ylikuormitus

Konstruktori voidaan myös ylikuormittaa, eikä sen tarvitse kattaa kaikkien luokan kenttien alustamista. Esimerkiksi, jos emme halua määrittää Alicen sukupuolta, voimme ylikuormittaa konstruktorin hyväksymään vain 2 parametria ja alustaa kentät niiden avulla:

Main.java

Main.java

copy
12345678910111213141516171819202122232425262728
package com.example; class Person { String name; int age; String gender; public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } public Person(String name, int age) { this.name = name; this.age = age; } } public class Main { public static void main(String[] args) { Person bob = new Person("Bob", 20, "Male"); System.out.println("Bob's name: " + bob.name + ", Bob's age: " + bob.age + ", Bob's gender: " + bob.gender); Person alice = new Person("Alice", 17); System.out.println("Alice's name: " + alice.name + ", Alice's age: " + alice.age); } }

Voidaan päätellä, että konstruktori voidaan ylikuormittaa kuten metodi, ja sille voidaan antaa eri määrä ja tyyppi parametreja.

Oletuskonstruktori

Oletuskonstruktori on konstruktori, joka ei ota parametreja eikä alusta mitään kenttiä. Se on olemassa kaikissa luokissa oletuksena, jos niissä ei ole muita konstruktoreita, minkä vuoksi sitä kutsutaan oletuskonstruktoriksi. Joka kerta kun luomme olion mistä tahansa luokasta, käytämme konstruktoria. Jos haluamme käyttää oletuskonstruktoria, kun luokassa on jo parametreja vastaanottava konstruktori, meidän täytyy kirjoittaa myös tyhjä konstruktori:

Main.java

Main.java

copy
123456789101112131415161718192021222324252627282930313233
package com.example; class Person { String name; int age; String gender; public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } public Person(String name, int age) { this.name = name; this.age = age; } public Person() { } } public class Main { public static void main(String[] args) { Person bob = new Person("Bob", 20, "Male"); System.out.println("Bob's name: " + bob.name + ", Bob's age: " + bob.age + ", Bob's gender: " + bob.gender); Person alice = new Person("Alice", 17); System.out.println("Alice's name: " + alice.name + ", Alice's age: " + alice.age); Person john = new Person(); System.out.println("John's name: " + john.name + ", John's age: " + john.age); } }

Käytämme kolmea eri konstruktoria alustamaan jokaisen Person-olion. Kuten viimeisestä esimerkistä näemme, John-oliolla ei ole nimeä eikä ikää, koska näitä kenttiä ei alusteta olion luomisen yhteydessä. Näin ollen voimme ylikuormittaa konstruktorin niin monta kertaa kuin tarvitsemme ja luoda olioita sen avulla.

1. Mikä seuraavista väittämistä konstruktoreista on tosi?

2. Mikä on konstruktorin tarkoitus Javassa?

3. Mikä seuraavista koodiesimerkeistä osoittaa oikean tavan luoda parametrisoitu konstruktori?

question mark

Mikä seuraavista väittämistä konstruktoreista on tosi?

Select the correct answer

question mark

Mikä on konstruktorin tarkoitus Javassa?

Select the correct answer

question mark

Mikä seuraavista koodiesimerkeistä osoittaa oikean tavan luoda parametrisoitu konstruktori?

Select the correct answer

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 4. Luku 6

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

course content

Kurssisisältö

Java Laajennettu

Java Laajennettu

1. Syvällinen Java-rakenne
2. Metodit
3. Merkkijonon Jatkotaso
4. Luokat
5. Luokat Jatko

book
Rakentaja

Kuinka yksinkertaistaa luokan alustamista?

Jokaisen kentän alustaminen erikseen voi olla työlästä. Tätä varten luokilla on konstruktorit. Konstruktorin syntaksi on seuraava:

Main.java

Main.java

copy
1234
modifier ClassName(ParameterType parameter1, ParameterType parameter2) { this.parameter1 = parameter1; this.parameter2 = parameter2; }

Käydään läpi jokainen tässä mainittu sana:

  • modifier: Tämä viittaa näkyvyysmuuntimeen, joka on usein public konstruktoreille. Tapaukset, joissa konstruktorilla voi olla muu näkyvyysmuunnin, käsitellään erillisessä kurssissa;
  • ClassName: Tämä on yksinkertaisesti sen luokan nimi, johon olet luomassa konstruktorin;
  • ParameterType: Tämä on konstruktorissa käytettävän parametrin tyyppi. On tärkeää kiinnittää tähän huomiota, koska parametrin tulee olla samaa tyyppiä kuin luokan kenttä; Esimerkiksi: Jos luokalla on kaksi kenttää, String name ja int age, konstruktorilla tulisi olla samat parametrit (jos haluamme alustaa kaikki kentät konstruktorin kautta). Jos haluamme alustaa vain tietyn luokan kentän konstruktorin kautta, esimerkiksi name, silloin käytetään vain yhtä parametria, jolla on sama tyyppi ja nimi kuin luokan kentällä;
  • Seuraavaksi konstruktorin rungossa annetaan arvot luokan kentille parametrien avulla.

"this"-avainsana

this-avainsanan avulla voidaan viitata luokan kenttään siinä luokassa, jossa tätä avainsanaa käytetään. Esimerkiksi, kun luokassa on kaksi kenttää: name ja age, voidaan kirjoittaa this.name konstruktorissa tai metodissa, jolloin viittaus kohdistuu nimenomaan luokan kenttään, ei paikalliseen muuttujaan, joka on annettu konstruktorin tai metodin parametrina. Näin luokan kentät voidaan alustaa konstruktorissa seuraavalla syntaksilla: this.name = name;.

Esimerkki

Tarkastellaan esimerkkiä konstruktorista luokassa, jonka avulla kaikki kentät voidaan alustaa selkeyden vuoksi:

Person.java

Person.java

copy
1234567891011
class Person { String name; int age; String gender; public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } }

Meillä on luokka nimeltä Person, jossa on kolme kenttää. Jokainen näistä kentistä on lisätty konstruktoriin käyttäen this-avainsanaa. Näin konstruktori alustaa kentät parametrien arvoilla. Käytetään tätä konstruktoria main-metodissa, jotta näet, että kentät alustetaan niillä arvoilla, jotka annetaan parametreina:

Main.java

Main.java

copy
123456789101112131415161718192021
package com.example; class Person { String name; int age; String gender; public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } } public class Main { public static void main(String[] args) { Person bob = new Person("Bob", 20, "Male"); System.out.println("Bob's name: " + bob.name + ", Bob's age: " + bob.age + ", Bob's gender: " + bob.gender); } }

Alustimme Person-olion bob käyttämällä konstruktoria välittämällä name, age ja gender parametreina. Tämän jälkeen tulostimme sen parametrit näytölle ja huomasimme, että olion kenttien arvot vastaavat konstruktorin parametreja.

Konstruktorin ylikuormitus

Konstruktori voidaan myös ylikuormittaa, eikä sen tarvitse kattaa kaikkien luokan kenttien alustamista. Esimerkiksi, jos emme halua määrittää Alicen sukupuolta, voimme ylikuormittaa konstruktorin hyväksymään vain 2 parametria ja alustaa kentät niiden avulla:

Main.java

Main.java

copy
12345678910111213141516171819202122232425262728
package com.example; class Person { String name; int age; String gender; public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } public Person(String name, int age) { this.name = name; this.age = age; } } public class Main { public static void main(String[] args) { Person bob = new Person("Bob", 20, "Male"); System.out.println("Bob's name: " + bob.name + ", Bob's age: " + bob.age + ", Bob's gender: " + bob.gender); Person alice = new Person("Alice", 17); System.out.println("Alice's name: " + alice.name + ", Alice's age: " + alice.age); } }

Voidaan päätellä, että konstruktori voidaan ylikuormittaa kuten metodi, ja sille voidaan antaa eri määrä ja tyyppi parametreja.

Oletuskonstruktori

Oletuskonstruktori on konstruktori, joka ei ota parametreja eikä alusta mitään kenttiä. Se on olemassa kaikissa luokissa oletuksena, jos niissä ei ole muita konstruktoreita, minkä vuoksi sitä kutsutaan oletuskonstruktoriksi. Joka kerta kun luomme olion mistä tahansa luokasta, käytämme konstruktoria. Jos haluamme käyttää oletuskonstruktoria, kun luokassa on jo parametreja vastaanottava konstruktori, meidän täytyy kirjoittaa myös tyhjä konstruktori:

Main.java

Main.java

copy
123456789101112131415161718192021222324252627282930313233
package com.example; class Person { String name; int age; String gender; public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } public Person(String name, int age) { this.name = name; this.age = age; } public Person() { } } public class Main { public static void main(String[] args) { Person bob = new Person("Bob", 20, "Male"); System.out.println("Bob's name: " + bob.name + ", Bob's age: " + bob.age + ", Bob's gender: " + bob.gender); Person alice = new Person("Alice", 17); System.out.println("Alice's name: " + alice.name + ", Alice's age: " + alice.age); Person john = new Person(); System.out.println("John's name: " + john.name + ", John's age: " + john.age); } }

Käytämme kolmea eri konstruktoria alustamaan jokaisen Person-olion. Kuten viimeisestä esimerkistä näemme, John-oliolla ei ole nimeä eikä ikää, koska näitä kenttiä ei alusteta olion luomisen yhteydessä. Näin ollen voimme ylikuormittaa konstruktorin niin monta kertaa kuin tarvitsemme ja luoda olioita sen avulla.

1. Mikä seuraavista väittämistä konstruktoreista on tosi?

2. Mikä on konstruktorin tarkoitus Javassa?

3. Mikä seuraavista koodiesimerkeistä osoittaa oikean tavan luoda parametrisoitu konstruktori?

question mark

Mikä seuraavista väittämistä konstruktoreista on tosi?

Select the correct answer

question mark

Mikä on konstruktorin tarkoitus Javassa?

Select the correct answer

question mark

Mikä seuraavista koodiesimerkeistä osoittaa oikean tavan luoda parametrisoitu konstruktori?

Select the correct answer

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 4. Luku 6
some-alt