Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Uso de Classes Complexas | Classes Avançadas
Java Avançado

bookUso de Classes Complexas

Utilizando objetos de classe em outra classe

Agora será discutido o uso mais complexo de classes, especificamente a utilização de objetos de classe dentro de outra classe.

Equipe e jogadores

Imagine uma situação em que existe uma classe Team. Cada equipe deve ter jogadores. Poderíamos preencher o campo players com valores simples do tipo String representando seus nomes, mas essa não seria a melhor prática. É muito melhor criar uma classe Player com seus próprios campos e métodos e, em seguida, criar um array de objetos Player dentro da classe Team. Vamos analisar um exemplo:

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"); } }

Como pode ser visto, estamos utilizando um array de objetos Player no campo players da classe Team. A partir disso, podemos tirar algumas conclusões:

  1. É possível criar arrays de objetos a partir de nossas próprias classes criadas;
  2. É possível utilizar objetos de uma classe dentro de outra classe para aprimorar a lógica geral.

Mas surge a seguinte questão: Como preencher esse array?

Resposta: Para isso, é necessário criar vários objetos Player e adicioná-los ao array de jogadores. Vamos criar um Dream Team no método principal e ver um exemplo:

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 + '}'; } }

Foram criados 3 objetos da classe Player e seus campos foram inicializados por meio do construtor. Em seguida, é criado um array do tipo Player e adicionados Bob, Alice e John a ele. Depois, é criado um objeto Team e seus campos são inicializados pelo construtor. O campo players[] é inicializado com o array criado anteriormente. O objeto é impresso no console e é possível ver que o objeto Team possui objetos Player na saída.

Owner and pet

Vamos analisar outro exemplo mais simples. Suponha que temos um Owner e um Pet. Será criada uma classe separada para cada um. A classe Pet terá apenas um campo - String name. A classe Owner terá dois campos - String name e 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; } }

Como pode ser observado, essas duas classes também estão conectadas, pois a classe Owner possui um campo do tipo Pet (que é a classe que criamos!).

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 5. Capítulo 1

Pergunte à IA

expand

Pergunte à IA

ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

Awesome!

Completion rate improved to 2.63

bookUso de Classes Complexas

Deslize para mostrar o menu

Utilizando objetos de classe em outra classe

Agora será discutido o uso mais complexo de classes, especificamente a utilização de objetos de classe dentro de outra classe.

Equipe e jogadores

Imagine uma situação em que existe uma classe Team. Cada equipe deve ter jogadores. Poderíamos preencher o campo players com valores simples do tipo String representando seus nomes, mas essa não seria a melhor prática. É muito melhor criar uma classe Player com seus próprios campos e métodos e, em seguida, criar um array de objetos Player dentro da classe Team. Vamos analisar um exemplo:

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"); } }

Como pode ser visto, estamos utilizando um array de objetos Player no campo players da classe Team. A partir disso, podemos tirar algumas conclusões:

  1. É possível criar arrays de objetos a partir de nossas próprias classes criadas;
  2. É possível utilizar objetos de uma classe dentro de outra classe para aprimorar a lógica geral.

Mas surge a seguinte questão: Como preencher esse array?

Resposta: Para isso, é necessário criar vários objetos Player e adicioná-los ao array de jogadores. Vamos criar um Dream Team no método principal e ver um exemplo:

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 + '}'; } }

Foram criados 3 objetos da classe Player e seus campos foram inicializados por meio do construtor. Em seguida, é criado um array do tipo Player e adicionados Bob, Alice e John a ele. Depois, é criado um objeto Team e seus campos são inicializados pelo construtor. O campo players[] é inicializado com o array criado anteriormente. O objeto é impresso no console e é possível ver que o objeto Team possui objetos Player na saída.

Owner and pet

Vamos analisar outro exemplo mais simples. Suponha que temos um Owner e um Pet. Será criada uma classe separada para cada um. A classe Pet terá apenas um campo - String name. A classe Owner terá dois campos - String name e 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; } }

Como pode ser observado, essas duas classes também estão conectadas, pois a classe Owner possui um campo do tipo Pet (que é a classe que criamos!).

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 5. Capítulo 1
some-alt