Kursinnhold
Java Utvidet
Java Utvidet
Bruk av Komplekse Klasser
Bruk av klasseobjekter i en annen klasse
Nå skal vi se på mer avansert bruk av klasser, spesielt bruk av klasseobjekter innenfor en annen klasse.
Lag og spillere
La oss tenke oss en situasjon der vi har en Team
-klasse. Hvert lag bør ha spillere. Vi kunne ha fylt players
-feltet med enkle String
-verdier som representerer navnene deres, men det ville ikke vært beste praksis. Det er mye bedre å lage en Player
-klasse med egne felter og metoder, og deretter opprette et array av Player
-objekter i Team
-klassen.
La oss se på et eksempel:
Team.java
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"); } }
Som du kan se, bruker vi et array av Player
-objekter i players
-feltet til Team
-klassen. Ut fra dette kan vi trekke noen konklusjoner:
- Det er mulig å opprette arrayer av objekter fra egenutviklede klasser;
- Objekter fra én klasse kan brukes i en annen klasse for å forbedre den overordnede logikken.
Men spørsmålet oppstår: Hvordan fyller vi dette arrayet?
Svar: For å gjøre dette må vi opprette flere Player
-objekter og legge dem til i arrayet av spillere. La oss opprette et Dream Team i main-metoden og se et eksempel:
Main.java
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 + '}'; } }
Vi opprettet 3 objekter av Player
-klassen og initialiserte feltene deres via konstruktøren. Deretter oppretter vi et array med Player
-typen og legger til Bob, Alice og John i det.
Deretter oppretter vi et Team
-objekt og initialiserer feltene via konstruktøren. Vi initialiserer players[]
-feltet med det tidligere opprettede arrayet.
Vi skriver ut objektet til konsollen og ser at Team
-objektet inneholder Player
-objekter i utdataene.
Eier og kjæledyr
La oss se på et annet, enklere eksempel. La oss si at vi har en Owner
og et Pet
. Vi lager en egen klasse for hver av dem.
Pet
-klassen vil kun ha ett felt – String name
.
Owner
-klassen vil ha to felt – String name
og Pet pet
.
Pet.java
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; } }
Som du kan se, er disse to klassene også koblet sammen, ettersom Owner
-klassen har et felt av typen Pet
(som er klassen vi selv har laget!).
Takk for tilbakemeldingene dine!