Contenido del Curso
Java Avanzado
Java Avanzado
Uso de Clases Complejas
Uso de objetos de clase en otra clase
Ahora discutiremos el uso más complejo de las clases, específicamente el uso de objetos de clase dentro de otra clase.
Equipo y jugadores
Imaginemos una situación en la que tenemos una clase Team
. Cada equipo debe tener jugadores. Podríamos llenar el campo players
con valores String
simples que representen sus nombres, pero esa no sería la mejor práctica. Sería mucho mejor crear una clase Player
con sus propios campos y métodos y luego crear un arreglo de objetos Player
dentro de la clase Team
.
Consideremos un ejemplo:
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"); } }
Como puedes ver, estamos utilizando un arreglo de objetos Player
en el campo players
de la clase Team
. A partir de esto, podemos sacar algunas conclusiones:
- Es posible crear arreglos de objetos a partir de una clase propia;
- Es posible utilizar objetos de una clase dentro de otra clase para mejorar la lógica general.
Pero surge la pregunta: ¿Cómo llenamos este arreglo?
Respuesta: Para ello, es necesario crear varios objetos Player
y agregarlos al arreglo de jugadores. Creemos un Dream Team en el método principal y veamos un ejemplo:
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 + '}'; } }
Creamos 3 objetos de la clase Player
e inicializamos sus campos a través del constructor. Luego creamos un arreglo de tipo Player
y agregamos a Bob, Alice y John.
A continuación, creamos un objeto Team
e inicializamos sus campos mediante el constructor. Inicializamos el campo players[]
con el arreglo previamente creado.
Imprimimos el objeto en la consola y observamos que el objeto Team
contiene objetos Player
en la salida.
Propietario y mascota
Veamos otro ejemplo más sencillo. Supongamos que tenemos un Owner
y un Pet
. Crearemos una clase separada para cada uno.
La clase Pet
tendrá solo un campo: String name
.
La clase Owner
tendrá dos campos: String name
y 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; } }
Como puedes observar, estas dos clases también están conectadas, ya que la clase Owner
tiene un campo de tipo Pet
(¡que es la clase que creamos nosotros mismos!).
¡Gracias por tus comentarios!