Kursinnehåll
Java Fördjupad
Java Fördjupad
Användning av Komplexa Klasser
Användning av klassobjekt i en annan klass
Nu kommer vi att diskutera mer avancerad användning av klasser, specifikt användning av klassobjekt inom en annan klass.
Lag och spelare
Föreställ dig en situation där vi har en Team
-klass. Varje lag ska ha spelare. Vi skulle kunna fylla players
-fältet med enkla String
-värden som representerar deras namn, men det vore inte bästa praxis. Det är mycket bättre att skapa en Player
-klass med egna fält och metoder och sedan skapa en array av Player
-objekt inom Team
-klassen.
Låt oss titta på ett exempel:
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 använder vi en array av Player
-objekt i fältet players
i klassen Team
. Utifrån detta kan vi dra några slutsatser:
- Det är möjligt att skapa arrayer av objekt från egna klasser;
- Objekt från en klass kan användas inom en annan klass för att förbättra den övergripande logiken.
Men frågan uppstår: Hur fyller vi denna array?
Svar: För att göra detta behöver vi skapa flera Player
-objekt och lägga till dem i arrayen av spelare. Låt oss skapa ett Dream Team i main-metoden och se ett exempel:
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 skapade 3 objekt av klassen Player
och initierade deras fält via konstruktorn. Därefter skapar vi en array av typen Player
och lägger till Bob, Alice och John i den.
Sedan skapar vi ett Team
-objekt och initierar dess fält via konstruktorn. Fältet players[]
initieras med den tidigare skapade arrayen.
Vi skriver ut objektet till konsolen och ser att Team
-objektet innehåller Player
-objekt i utskriften.
Ägare och husdjur
Låt oss titta på ett annat enklare exempel. Antag att vi har en Owner
och ett Pet
. Vi skapar en separat klass för varje.
Klassen Pet
kommer endast att ha ett fält – String name
.
Klassen Owner
kommer att ha två fält – String name
och 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 är dessa två klasser också kopplade, eftersom klassen Owner
har ett fält av typen Pet
(vilket är klassen vi själva skapade!).
Tack för dina kommentarer!