JAVA練習問題4-1:インタスタンスメソッドを理解しよう

記事内に商品プロモーションを含む場合があります

JAVAの初心者向け問題4-1:インタスタンスメソッドを理解しよう

この問題を解くために必要な知識:
【レベル1~3の知識】
コメントの書き方、変数と定数、基本データ型とプリミティブ型、四則演算と論理演算、入力と出力(Scannerクラス)、配列、分岐処理(if、if~else、switch)、繰り返し処理(for、while、do~while)、メソッドの定義と呼び出し、メソッドの戻り値、メソッドのオーバーロード、例外処理(try-catch文、throws、throw)、クラスの定義と使用、インスタンス、コンストラクタ、コレクションの基礎、コレクション(List, ArrayList)、コレクション(HashSet, TreeSet)、コレクション(HashMap, TreeMap)、

【レベル4の知識】
インスタンスメソッド、ゲッターとセッターカプセル化、クラスメンバ、クラスの継承抽象クラスインターフェース

<<前の問題 問題集Top 次の問題>>

JAVAの文法「インスタンスメソッド」とは

ここではインスタンスメソッドの意味や使い方を復習します。必要ない方はここをクリックして練習問題へ飛びましょう。




Javaを勉強していると、「インスタンスメソッド」という言葉に出会うことがあります。

この記事では、インスタンスメソッドが何なのか、どのように使うのかをわかりやすく説明します。

インスタンスメソッドとは?

まず、インスタンスメソッドとは、クラスのインスタンス(オブジェクト)に属するメソッドのことです。

クラスはオブジェクトの設計図のようなものです。クラスからオブジェクトを作ると、そのオブジェクトが持つメソッド(動作や機能)を使うことができます。これがインスタンスメソッドです。

クラスとインスタンスの関係

クラスとインスタンスについて理解するために、まず簡単な例を見てみましょう。

// クラス定義
class Dog {
    // インスタンス変数(属性)
    String name;

    // インスタンスメソッド(動作)
    void bark() {
        System.out.println(name + "が吠えました!");
    }
}

public class Main {
    public static void main(String[] args) {
        // Dogクラスのインスタンスを作成
        Dog myDog = new Dog();

        // インスタンスの属性に値を設定
        myDog.name = "ポチ";

        // インスタンスメソッドを呼び出し
        myDog.bark(); // 出力: ポチが吠えました!
    }
}

この例では、Dog というクラスを定義しています。

このクラスには「名前」を表す name という属性(インスタンス変数)と、「吠える」動作を表す bark というメソッド(インスタンスメソッド)があります。

myDog というオブジェクトを作成し、そのオブジェクトを通して bark というインスタンスメソッドを呼び出しています。

インスタンスメソッドのポイント

  1. インスタンスを作成してから使う
    インスタンスメソッドは、クラスからインスタンスを作成した後に、そのインスタンスを使って呼び出します。上記の例では myDog がインスタンスで、 myDog.bark() という形でメソッドを呼び出しています。
  2. インスタンスの状態を使える
    インスタンスメソッドは、インスタンスが持つ属性(インスタンス変数)にアクセスして、インスタンスの状態に基づいて動作を変えることができます。例では、myDog.name を使って「ポチが吠えました!」という出力を行っています。

インスタンスメソッドとクラスメソッドの違い

Javaにはインスタンスメソッドと似た概念として、クラスメソッド(静的メソッド) も存在します。

クラスメソッドは static キーワードを使って定義され、インスタンスを作成しなくても呼び出すことができる点が大きな違いです。

class MathUtils {
    // クラスメソッド(staticを使って定義)
    static int add(int a, int b) {
        return a + b;
    }
}

public class Main {
    public static void main(String[] args) {
        // クラスメソッドはクラス名を使って呼び出す
        int sum = MathUtils.add(5, 10);
        System.out.println("合計: " + sum); // 出力: 合計: 15
    }
}

クラスメソッドは、インスタンスに依存しない処理を行うときに便利ですが、インスタンスメソッドはインスタンスの状態に応じて動作を変えたいときに使われます。

インスタンスメソッドを効果的に使うには?

インスタンスメソッドを使う際の基本的なポイントは以下の通りです。

  1. クラスを設計する際に、どんな動作が必要か考える
    インスタンスが持つべき動作(メソッド)を設計する際には、そのインスタンスがどのように使われるかを考えます。たとえば、Dog クラスなら「吠える」や「走る」など、現実世界の犬ができることをメソッドとして定義することができます。
  2. インスタンスの属性を活用する
    インスタンスメソッド内では、インスタンスの属性(インスタンス変数)を自由に使えます。これにより、インスタンスごとに異なる動作をさせることができます。
  3. 使いやすいメソッドを作る
    メソッドの名前や動作がわかりやすく、使いやすいものにすることが重要です。メソッド名は動作を明確に表現し、メソッド内での処理もシンプルに保つことで、他の人が使いやすいクラスを作ることができます。

まとめ

インスタンスメソッドは、クラスから作成されたオブジェクトに属するメソッドであり、オブジェクトの状態に応じて動作を変えることができます。

Javaのプログラムでは、インスタンスメソッドをうまく使うことで、現実世界の物事を表現しやすく、柔軟なコードを作成することができます。




JAVA練習問題4-1_ペットの情報を管理するクラス

ペットの情報を管理するプログラムを作成しましょう。

このプログラムではペットの名前と年齢を管理します。

ペットの情報を格納するクラスを定義し、インスタンスメソッドを使ってペットの情報を表示する機能を実装します。

この問題の要件

以下の要件を満たすプログラムを作成してください。

  • Petクラスを作成し、以下のフィールドを持つこと。
    • 名前 (String型)
    • 年齢 (int型)
  • Petクラスには以下のインスタンスメソッドを実装すること。
    • showInfoメソッド:ペットの名前と年齢を表示する。
  • Petクラスには、フィールドを初期化するためのコンストラクタを作成すること。
  • メインメソッドで複数のペットの情報を管理し、それぞれの情報を表示すること。

ただし、以下のような実行結果となること。

----- ↓出力される結果の例↓ -----

名前: ポチ, 年齢: 3歳
名前: タマ, 年齢: 2歳
名前: ココ, 年齢: 5歳

----- ↑出力される結果の例↑ -----

この問題を解くヒント

1からコードを組み立てることが難しい場合は、以下のヒントを開いて参考にしましょう。

ヒント1【コードの構成を見る】

正解のコードは上から順に以下のような構成となっています。

1.import文
2.Petクラスの定義
 2-1.フィールドの定義
  2-1-1.名前(name)のフィールド(String型)
  2-1-2.年齢(age)のフィールド(int型)
 2-2.コンストラクタの定義
  2-2-1.引数として名前と年齢を受け取る
  2-2-2.フィールドを引数の値で初期化する
 2-3.インスタンスメソッドの定義
  2-3-1.showInfoメソッド
   2-3-1-1.名前と年齢を表示する
3.PetManagementクラスの定義
 3-1.mainメソッドの定義
  3-1-1.ArrayListの作成
  3-1-2.Petオブジェクトの追加
   3-1-2-1.Petオブジェクトをリストに追加
    3-1-2-1-1.”ポチ”、3歳
    3-1-2-1-2.”タマ”、2歳
    3-1-2-1-3.”ココ”、5歳
  3-1-3.forループでペットの情報を表示
   3-1-3-1.showInfoメソッドを呼び出す

ヒント2【穴埋め問題にする】

以下のコードをコピーし、コメントに従ってコードを完成させて下さい。

import java.util.ArrayList;

class Pet {
    // フィールド:名前と年齢
    String name;
    int age;

    // コンストラクタ:フィールドを初期化する
    public Pet(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // インスタンスメソッド:ペットの情報を表示する
    public void showInfo() {
        System.out.println("名前: " + name + ", 年齢: " + age + "歳");
    }
}

public class PetManagement {
    public static void main(String[] args) {
        // 複数のペットを管理するためのArrayListを作成
        ArrayList<Pet> pets = new ArrayList<>();

        // ***ここにペットの情報を追加するコードを書いてください***
        // 例: pets.add(new Pet("ポチ", 3));
        
        // すべてのペットの情報を表示
        // ***ここにforループを使ってペットの情報を表示するコードを書いてください***
        // 例: for (Pet pet : pets) { pet.showInfo(); }
    }
}

 

このヒントを見てもまだ回答を導き出すのが難しいと感じる場合は、先に正解のコードと解説を見て内容を理解するようにしましょう。

解答例

この問題の一つの正解例とそのコードの解説を以下に示します。

正解コードの例

例えば以下のようなプログラムが考えられます。

********************

import java.util.ArrayList;

class Pet {
    // フィールド:名前と年齢
    String name;
    int age;

    // コンストラクタ:フィールドを初期化する
    public Pet(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // インスタンスメソッド:ペットの情報を表示する
    public void showInfo() {
        System.out.println("名前: " + name + ", 年齢: " + age + "歳");
    }
}

public class PetManagement {
    public static void main(String[] args) {
        // 複数のペットを管理するためのArrayListを作成
        ArrayList<Pet> pets = new ArrayList<>();

        // ペットの情報を追加
        pets.add(new Pet("ポチ", 3));
        pets.add(new Pet("タマ", 2));
        pets.add(new Pet("ココ", 5));

        // すべてのペットの情報を表示
        for (Pet pet : pets) {
            pet.showInfo(); // インスタンスメソッドを呼び出して情報を表示
        }
    }
}

********************

コードの解説

このJavaコードは、ペットの名前や年齢などの情報を管理し、それを表示するための簡単なプログラムです。

この解説では、コードをブロックごとに分け、どのように動作するかを説明します。

特にインスタンスメソッドに注目し、その役割を詳しく解説します。

クラスの定義とフィールド

class Pet {
    String name;
    int age;
}

まず、Pet というクラスを定義しています。

このクラスは、ペットの名前を表す name と、年齢を表す age という2つのフィールド(変数)を持っています。

これらはそれぞれ、ペットの名前や年齢を保存するために使われます。

  • フィールドとは、クラス内で定義されている変数のことです。nameagePet クラスの一部であり、各ペットオブジェクトがそれぞれの名前や年齢を保持します。

コンストラクタ

public Pet(String name, int age) {
    this.name = name;
    this.age = age;
}

コンストラクタは、Pet クラスのオブジェクトが作られたときに自動的に呼び出されるメソッドです。

ここでは、作成されたペットの nameage に値を代入しています。

  • this.name = name; は、クラスのフィールド name に、コンストラクタの引数 name を代入しています。同様に、age も同じように処理されます。
  • コンストラクタを使うことで、新しく作られたオブジェクトに初期値を設定できます。

インスタンスメソッド: ペットの情報を表示する

public void showInfo() {
    System.out.println("名前: " + name + ", 年齢: " + age + "歳");
}

ここで定義されている showInfo メソッドは、インスタンスメソッドです。

このメソッドは、オブジェクトの nameage を使って、ペットの情報を表示します。

  • インスタンスメソッドとは、クラスから作成されたオブジェクトに属するメソッドです。この場合、showInfo は各ペットの名前と年齢を出力します。インスタンスメソッドは、そのオブジェクトに依存して動作します。
  • System.out.println を使って、ペットの情報をコンソールに出力します。

メインメソッド: 複数のペットを管理

public class PetManagement {
    public static void main(String[] args) {
        ArrayList<Pet> pets = new ArrayList<>();
        pets.add(new Pet("ポチ", 3));
        pets.add(new Pet("タマ", 2));
        pets.add(new Pet("ココ", 5));

PetManagement クラスの中にある main メソッドは、Javaプログラムのエントリーポイントです。

ここでは、ペットを管理するための ArrayList を使って、複数の Pet オブジェクトを作成・追加しています。

  • ArrayList は、複数のオブジェクトをリスト形式で管理できるデータ構造です。ここでは、複数のペットを管理するために使われています。
  • new Pet("ポチ", 3) は、新しいペットオブジェクトを作成しています。"ポチ" という名前で3歳のペットが作られ、pets リストに追加されます。

ペットの情報を表示する

for (Pet pet : pets) {
    pet.showInfo();
}

for ループを使って、リストに追加された全てのペットの情報を表示しています。

各ペットの showInfo メソッドを呼び出し、それぞれの名前と年齢を出力します。

  • for (Pet pet : pets) は、pets リストの中の各 Pet オブジェクトを1つずつ取り出し、pet という変数に代入します。
  • pet.showInfo() は、そのペットの showInfo メソッドを呼び出し、名前と年齢を表示します。

まとめ

このJavaプログラムでは、クラスを使ってペットの情報を管理し、インスタンスメソッドを使ってその情報を表示しています。

インスタンスメソッドは、オブジェクトが持つデータに基づいて動作するメソッドであり、プログラム内で特定の操作を行う重要な役割を担います。

<<前の問題 問題集Top 次の問題>>

この問題への質問・コメント

この問題を作成するにあたりAIを活用しています。

問題ないことは確認していますが、もし間違いや表現の違和感などありましたら、ご指摘頂けると大変助かります。






    JAVA練習問題集へ戻る
    トップページへ戻る