Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Private-Muuttuja | Luokat Jatko
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
Private-Muuttuja

Kuinka piilottaa kentät ja metodit toiselta luokalta?

Suojausmuuttujia käytetään määrittämään muuttujien ja metodien näkyvyys ja saavutettavuus Javassa. Niiden avulla voidaan määritellä jäsenten näkyvyysalue ja rajoittaa pääsyä tiettyihin luokan jäseniin.

Olemme jo käsitelleet suojausmuuttujia edellisessä osiossa. Nyt tarkastelemme tarkemmin yleisimmin käytettyä suojausmuuttujaa - private.

Kuten tiedät, private-suojausmuuttujalla kenttään/metodiin pääsee käsiksi vain siinä luokassa, jossa se on määritelty. Katsotaan esimerkkiä private-muuttujan käytöstä:

Jos emme halua, että muuttuja yhdessä luokassa on näkyvissä tai käytettävissä toisessa luokassa, voimme käyttää private-suojausmuuttujaa:

Main.java

Main.java

copy
123456789101112131415
package com.example; public class Main { public static void main(String[] args) { Person bob = new Person(); bob.name = "Bob"; System.out.println(bob.name); } } class Person { private String name; private int age; private String gender; }

Olemme määritelleet Person-luokan kentät private-muuttujiksi. Kun yritämme alustaa kentän suoraan, saamme virheen, joka ilmoittaa, että name-kentällä on private-näkyvyysmuuttuja eikä siihen voi viitata tai sitä voi muokata pääohjelmassa.

Kuinka alustaa private-kenttä?

Yksinkertaisin tapa kiertää suojaus on käyttää alustusta konstruktorin kautta. Tällä tavalla voimme ainoastaan alustaa olioiden kentät, mutta emme voi käyttää näitä kenttiä. Tarkastellaan esimerkkiä:

Main.java

Main.java

copy
123456789101112131415161718
package com.example; public class Main { public static void main(String[] args) { Person bob = new Person("Bob"); System.out.println(bob.name); } } class Person { private String name; private int age; private String gender; public Person(String name) { this.name = name; } }

Pystyimme alustamaan name-kentän konstruktorin avulla, mutta emme vieläkään voi käyttää tätä kenttää tai tulostaa sitä System.out.println()-komennolla. Tämän kiertämiseksi voimme ylikirjoittaa toString()-metodin, jolloin kun kutsumme System.out.println(bob);, se näyttää tietoa kentistä. Tarkastellaan esimerkkiä:

Main.java

Main.java

copy
1234567891011121314151617181920212223
package com.example; public class Main { public static void main(String[] args) { Person bob = new Person("Bob"); System.out.println(bob); } } class Person { private String name; private int age; private String gender; public Person(String name) { this.name = name; } @Override public String toString() { return "Person{" + "name='" + name + '\'' + '}'; } }

Onnistuimme lopulta näyttämään name-olion bob-kentän arvon. Tämä saavutettiin käyttämällä ylikirjoitettua toString()-metodia, jossa toteutimme logiikan name-kentän näyttämiseksi.

Herää kysymys, miksi tarvitsemme tätä näkyvyysmuutinta, jos joudumme kirjoittamaan niin paljon ylimääräistä koodia?

Joskus eri luokissa on samannimisiä muuttujia, ja tällaisissa tapauksissa on tarpeen piilottaa näiden luokkien muuttujat, jotta muut luokat eivät pääse käsiksi tarpeettomiin kenttiin. Tämä parantaa merkittävästi koodin kirjoittamisen selkeyttä, kun ymmärtää, mihin luokkaan kukin kenttä kuuluu.

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 5. Luku 3

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
Private-Muuttuja

Kuinka piilottaa kentät ja metodit toiselta luokalta?

Suojausmuuttujia käytetään määrittämään muuttujien ja metodien näkyvyys ja saavutettavuus Javassa. Niiden avulla voidaan määritellä jäsenten näkyvyysalue ja rajoittaa pääsyä tiettyihin luokan jäseniin.

Olemme jo käsitelleet suojausmuuttujia edellisessä osiossa. Nyt tarkastelemme tarkemmin yleisimmin käytettyä suojausmuuttujaa - private.

Kuten tiedät, private-suojausmuuttujalla kenttään/metodiin pääsee käsiksi vain siinä luokassa, jossa se on määritelty. Katsotaan esimerkkiä private-muuttujan käytöstä:

Jos emme halua, että muuttuja yhdessä luokassa on näkyvissä tai käytettävissä toisessa luokassa, voimme käyttää private-suojausmuuttujaa:

Main.java

Main.java

copy
123456789101112131415
package com.example; public class Main { public static void main(String[] args) { Person bob = new Person(); bob.name = "Bob"; System.out.println(bob.name); } } class Person { private String name; private int age; private String gender; }

Olemme määritelleet Person-luokan kentät private-muuttujiksi. Kun yritämme alustaa kentän suoraan, saamme virheen, joka ilmoittaa, että name-kentällä on private-näkyvyysmuuttuja eikä siihen voi viitata tai sitä voi muokata pääohjelmassa.

Kuinka alustaa private-kenttä?

Yksinkertaisin tapa kiertää suojaus on käyttää alustusta konstruktorin kautta. Tällä tavalla voimme ainoastaan alustaa olioiden kentät, mutta emme voi käyttää näitä kenttiä. Tarkastellaan esimerkkiä:

Main.java

Main.java

copy
123456789101112131415161718
package com.example; public class Main { public static void main(String[] args) { Person bob = new Person("Bob"); System.out.println(bob.name); } } class Person { private String name; private int age; private String gender; public Person(String name) { this.name = name; } }

Pystyimme alustamaan name-kentän konstruktorin avulla, mutta emme vieläkään voi käyttää tätä kenttää tai tulostaa sitä System.out.println()-komennolla. Tämän kiertämiseksi voimme ylikirjoittaa toString()-metodin, jolloin kun kutsumme System.out.println(bob);, se näyttää tietoa kentistä. Tarkastellaan esimerkkiä:

Main.java

Main.java

copy
1234567891011121314151617181920212223
package com.example; public class Main { public static void main(String[] args) { Person bob = new Person("Bob"); System.out.println(bob); } } class Person { private String name; private int age; private String gender; public Person(String name) { this.name = name; } @Override public String toString() { return "Person{" + "name='" + name + '\'' + '}'; } }

Onnistuimme lopulta näyttämään name-olion bob-kentän arvon. Tämä saavutettiin käyttämällä ylikirjoitettua toString()-metodia, jossa toteutimme logiikan name-kentän näyttämiseksi.

Herää kysymys, miksi tarvitsemme tätä näkyvyysmuutinta, jos joudumme kirjoittamaan niin paljon ylimääräistä koodia?

Joskus eri luokissa on samannimisiä muuttujia, ja tällaisissa tapauksissa on tarpeen piilottaa näiden luokkien muuttujat, jotta muut luokat eivät pääse käsiksi tarpeettomiin kenttiin. Tämä parantaa merkittävästi koodin kirjoittamisen selkeyttä, kun ymmärtää, mihin luokkaan kukin kenttä kuuluu.

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 5. Luku 3
some-alt