Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Monimutkaisten Luokkien Käyttö | 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
Monimutkaisten Luokkien Käyttö

Luokkaolioiden käyttö toisessa luokassa

Tarkastellaan nyt monimutkaisempaa luokkien käyttöä, erityisesti luokkaolioiden hyödyntämistä toisen luokan sisällä.

Joukkue ja pelaajat

Kuvitellaan tilanne, jossa meillä on Team-luokka. Jokaisella joukkueella tulisi olla pelaajia. Voisimme täyttää players-kentän yksinkertaisilla String-arvoilla, jotka edustavat heidän nimiään, mutta tämä ei olisi paras käytäntö. Paljon parempi olisi luoda Player-luokka omilla kentillään ja metodeillaan, ja sitten luoda taulukko Player-olioista Team-luokan sisälle. Tarkastellaan esimerkkiä:

Team.java

Team.java

copy
1234567891011121314151617181920212223242526
class Team { String title; String country; Player[] players; void play() { System.out.println("Team " + title + "is playing!"); } } class Player { String name; int age; int yearsOfExperience; public Player(String name, int age, int yearsOfExperience) { this.name = name; this.age = age; this.yearsOfExperience = yearsOfExperience; } void introduce() { System.out.println("Hi, my name is " + name + ", I am " + age + " years old and have " + yearsOfExperience + " years of experience"); } }

Kuten huomaat, käytämme Player-luokan players-kentässä Team-olioiden taulukkoa. Tästä voimme tehdä muutamia johtopäätöksiä:

  1. Voimme luoda olioiden taulukoita itse luomastamme luokasta;
  2. Voimme käyttää yhden luokan olioita toisen luokan sisällä parantaaksemme kokonaislogiikkaa.

Mutta herää kysymys: Kuinka täytämme tämän taulukon?

Vastaus: Tätä varten meidän täytyy luoda useita Player-olioita ja lisätä ne pelaajien taulukkoon. Luodaan Dream Team päämetodissa ja katsotaan esimerkki:

Main.java

Main.java

copy
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
package com.example; import java.util.Arrays; public class Main { public static void main(String[] args) { Player bob = new Player("Bob", 32, 5); Player alice = new Player("Alice", 28, 8); Player john = new Player("John", 41, 20); Player[] players = {bob, alice, john}; Team dreamTeam = new Team("Dream Team", "USA", players); System.out.println(dreamTeam); } } class Team { String title; String country; Player[] players; public Team(String title, String country, Player[] players) { this.title = title; this.country = country; this.players = players; } void play() { System.out.println("Team " + title + "is playing!"); } @Override public String toString() { return "Team{" + "title='" + title + '\'' + ", country='" + country + '\'' + ", players=" + Arrays.toString(players) + '}'; } } class Player { String name; int age; int yearsOfExperience; public Player(String name, int age, int yearsOfExperience) { this.name = name; this.age = age; this.yearsOfExperience = yearsOfExperience; } void introduce() { System.out.println("Hi, my name is " + name + ", I am " + age + " years old and have " + yearsOfExperience + " years of experience"); } @Override public String toString() { return "Player{" + "name='" + name + '\'' + ", age=" + age + ", yearsOfExperience=" + yearsOfExperience + '}'; } }

Loimme 3 Player-luokan oliota ja alustimme niiden kentät konstruktorin avulla. Sitten loimme taulukon, jonka tyyppinä on Player, ja lisäsimme siihen Bobin, Alicen ja Johnin. Seuraavaksi loimme Team-olion ja alustimme sen kentät konstruktorin avulla. Alustimme players[]-kentän aiemmin luodulla taulukolla. Tulostamme olion konsoliin ja näemme, että Team-oliolla on Player-olioita tulosteessa.

Omistaja ja lemmikki

Tarkastellaan toista yksinkertaisempaa esimerkkiä. Oletetaan, että meillä on Owner ja Pet. Luomme kummallekin oman luokan. Pet-luokalla on vain yksi kenttä – String name. Owner-luokalla on kaksi kenttää – String name ja Pet pet.

Pet.java

Pet.java

copy
123456789101112131415161718
class Pet { String name; public Pet(String name) { this.name = name; } } class Owner { String name; Pet pet; public Owner(String name, Pet pet) { this.name = name; this.pet = pet; } }

Kuten huomaat, nämä kaksi luokkaa ovat myös yhteydessä toisiinsa, sillä Owner-luokalla on kenttä tyyppiä Pet (joka on itse luomamme luokka!).

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 5. Luku 1

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
Monimutkaisten Luokkien Käyttö

Luokkaolioiden käyttö toisessa luokassa

Tarkastellaan nyt monimutkaisempaa luokkien käyttöä, erityisesti luokkaolioiden hyödyntämistä toisen luokan sisällä.

Joukkue ja pelaajat

Kuvitellaan tilanne, jossa meillä on Team-luokka. Jokaisella joukkueella tulisi olla pelaajia. Voisimme täyttää players-kentän yksinkertaisilla String-arvoilla, jotka edustavat heidän nimiään, mutta tämä ei olisi paras käytäntö. Paljon parempi olisi luoda Player-luokka omilla kentillään ja metodeillaan, ja sitten luoda taulukko Player-olioista Team-luokan sisälle. Tarkastellaan esimerkkiä:

Team.java

Team.java

copy
1234567891011121314151617181920212223242526
class Team { String title; String country; Player[] players; void play() { System.out.println("Team " + title + "is playing!"); } } class Player { String name; int age; int yearsOfExperience; public Player(String name, int age, int yearsOfExperience) { this.name = name; this.age = age; this.yearsOfExperience = yearsOfExperience; } void introduce() { System.out.println("Hi, my name is " + name + ", I am " + age + " years old and have " + yearsOfExperience + " years of experience"); } }

Kuten huomaat, käytämme Player-luokan players-kentässä Team-olioiden taulukkoa. Tästä voimme tehdä muutamia johtopäätöksiä:

  1. Voimme luoda olioiden taulukoita itse luomastamme luokasta;
  2. Voimme käyttää yhden luokan olioita toisen luokan sisällä parantaaksemme kokonaislogiikkaa.

Mutta herää kysymys: Kuinka täytämme tämän taulukon?

Vastaus: Tätä varten meidän täytyy luoda useita Player-olioita ja lisätä ne pelaajien taulukkoon. Luodaan Dream Team päämetodissa ja katsotaan esimerkki:

Main.java

Main.java

copy
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
package com.example; import java.util.Arrays; public class Main { public static void main(String[] args) { Player bob = new Player("Bob", 32, 5); Player alice = new Player("Alice", 28, 8); Player john = new Player("John", 41, 20); Player[] players = {bob, alice, john}; Team dreamTeam = new Team("Dream Team", "USA", players); System.out.println(dreamTeam); } } class Team { String title; String country; Player[] players; public Team(String title, String country, Player[] players) { this.title = title; this.country = country; this.players = players; } void play() { System.out.println("Team " + title + "is playing!"); } @Override public String toString() { return "Team{" + "title='" + title + '\'' + ", country='" + country + '\'' + ", players=" + Arrays.toString(players) + '}'; } } class Player { String name; int age; int yearsOfExperience; public Player(String name, int age, int yearsOfExperience) { this.name = name; this.age = age; this.yearsOfExperience = yearsOfExperience; } void introduce() { System.out.println("Hi, my name is " + name + ", I am " + age + " years old and have " + yearsOfExperience + " years of experience"); } @Override public String toString() { return "Player{" + "name='" + name + '\'' + ", age=" + age + ", yearsOfExperience=" + yearsOfExperience + '}'; } }

Loimme 3 Player-luokan oliota ja alustimme niiden kentät konstruktorin avulla. Sitten loimme taulukon, jonka tyyppinä on Player, ja lisäsimme siihen Bobin, Alicen ja Johnin. Seuraavaksi loimme Team-olion ja alustimme sen kentät konstruktorin avulla. Alustimme players[]-kentän aiemmin luodulla taulukolla. Tulostamme olion konsoliin ja näemme, että Team-oliolla on Player-olioita tulosteessa.

Omistaja ja lemmikki

Tarkastellaan toista yksinkertaisempaa esimerkkiä. Oletetaan, että meillä on Owner ja Pet. Luomme kummallekin oman luokan. Pet-luokalla on vain yksi kenttä – String name. Owner-luokalla on kaksi kenttää – String name ja Pet pet.

Pet.java

Pet.java

copy
123456789101112131415161718
class Pet { String name; public Pet(String name) { this.name = name; } } class Owner { String name; Pet pet; public Owner(String name, Pet pet) { this.name = name; this.pet = pet; } }

Kuten huomaat, nämä kaksi luokkaa ovat myös yhteydessä toisiinsa, sillä Owner-luokalla on kenttä tyyppiä Pet (joka on itse luomamme luokka!).

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 5. Luku 1
some-alt