Kursusindhold
Java Udvidet
Java Udvidet
Brug af Komplekse Klasser
Brug af klasseobjekter i en anden klasse
Nu vil vi diskutere den mere komplekse anvendelse af klasser, specifikt brugen af klasseobjekter inden for en anden klasse.
Hold og spillere
Lad os forestille os en situation, hvor vi har en Team
-klasse. Hvert hold skal have spillere. Vi kunne udfylde players
-feltet med simple String
-værdier, der repræsenterer deres navne, men det ville ikke være den bedste praksis. Det ville være meget bedre at oprette en Player
-klasse med sine egne felter og metoder og derefter oprette et array af Player
-objekter inden for Team
-klassen.
Lad os overveje 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, bruger vi et array af Player
-objekter i players
-feltet i Team
-klassen. Ud fra dette kan vi drage nogle konklusioner:
- Vi kan oprette arrays af objekter fra vores egen definerede klasse;
- Vi kan anvende objekter fra én klasse inden for en anden klasse for at forbedre den overordnede logik.
Men spørgsmålet opstår: Hvordan udfylder vi dette array?
Svar: For at gøre dette skal vi oprette flere Player
-objekter og tilføje dem til arrayet af spillere. Lad os oprette 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 oprettede 3 objekter af Player
-klassen og initialiserede deres felter via konstruktøren. Derefter opretter vi et array med typen Player
og tilføjer Bob, Alice og John til det.
Dernæst opretter vi et Team
-objekt og initialiserer dets felter via konstruktøren. Vi initialiserer players[]
-feltet med det tidligere oprettede array.
Vi udskriver objektet til konsollen og ser, at Team
-objektet indeholder Player
-objekter i outputtet.
Ejer og kæledyr
Lad os se på et andet, enklere eksempel. Lad os sige, at vi har en Owner
og et Pet
. Vi opretter en separat klasse for hver.
Pet
-klassen vil kun have ét felt - String name
.
Owner
-klassen vil have to felter - 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 klasser også forbundet, da Owner
-klassen har et felt af typen Pet
(som er den klasse, vi selv har oprettet!).
Tak for dine kommentarer!