Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
学ぶ 複雑なクラスの使用方法 | クラス応用
Javaクラスとコアメカニクス

book複雑なクラスの使用方法

メニューを表示するにはスワイプしてください

他のクラスでのクラスオブジェクトの利用

ここでは、より複雑なクラスの使い方、特にクラスオブジェクトを別のクラス内で使用する方法について説明します。

チームとプレイヤー

例えば、Team クラスがあるとします。すべてのチームにはプレイヤーが必要です。players フィールドにプレイヤー名を表す単純な String 値を格納することもできますが、それは最善の方法ではありません。代わりに、独自の フィールドメソッド を持つ Player クラスを作成し、Player クラス内で Team オブジェクトの配列を作成する方が適切です。 以下の例を見てみましょう:

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

ご覧の通り、Player クラスの players フィールドには Team オブジェクトの配列を使用しています。ここからいくつかの結論が導き出せます:

  1. 独自に作成したクラスからオブジェクトの配列を作成できる;
  2. あるクラスのオブジェクトを別のクラス内で使用することで、全体のロジックを向上できる。

しかし、疑問が生じます: この配列をどのように埋めるのか?

答え: これを行うには、複数の Player オブジェクトを作成し、それらをプレイヤー配列に追加する必要があります。メインメソッドで Dream Team を作成し、例を見てみましょう:

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

Player クラスのオブジェクトを 3 つ作成し、コンストラクタを使って各フィールドを初期化。 その後、Player 型の配列を作成し、BobAliceJohn を追加。 次に、Team オブジェクトを作成し、コンストラクタでフィールドを初期化。 players[] フィールドには、先ほど作成した配列 を設定。 オブジェクトをコンソールに出力すると、Team オブジェクトの出力に Player オブジェクトが含まれていることが確認できる。

Owner と Pet

さらにシンプルな例を見てみる。たとえば OwnerPet がある場合、それぞれにクラスを作成。 Pet クラスには 1 つのフィールド String name のみを持つ。 Owner クラスには 2 つのフィールド String namePet 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; } }

ご覧のとおり、これら2つのクラスも関連しています。Owner クラスには Pet 型のフィールドがあり(これは自分たちで作成したクラスです)。

すべて明確でしたか?

どのように改善できますか?

フィードバックありがとうございます!

セクション 5.  1

AIに質問する

expand

AIに質問する

ChatGPT

何でも質問するか、提案された質問の1つを試してチャットを始めてください

セクション 5.  1
some-alt