家・車以外で、人生で一番奮発した買い物

javaのthisについて質問です。enumで列挙した列挙子をvalues()で取得し、拡張for分で回す。拡張for分で取得した値を変数名.メソッドで呼び出しthisを使うとなぜ列挙子が出力できるのか分かりません。thisは自分自身
のインスタンスを指すと言われていますが、インスタンスを指していたらなぜ列挙子が出力されるのかthisの挙動がよく分からず困っています。分かりやすく教えていただきたいです。

public class Main{

public enum Fruit {
Orange(10),
Apple(2),
Melon(3);

// フィールドの定義
public int id;

// コンストラクタの定義
private Fruit(int id) {
this.id = id;
}
public void test(){
System.out.println(this);
}
}

public static void main(String[] args){
for(Fruit frt : Fruit.values()){
frt.test();
}
}
}

A 回答 (3件)

Fruit.values()で列挙子それぞれのEnumインスタンス配列が取得されます。


Fruit frt : Fruit.values()これにより配列の1つの値がfrtに格納されます。
public void test()にとって自己インスタンスとは列挙子のインスタンスになります。

(C++のような例外はありますが)JavaやC#といったクラスベースオブジェクト指向の高級言語の場合全てがオブジェクトです。(プリミティブ型は特殊な挙動をしますが中身はオブジェクトです)

そこに何か値が設定されているという事はそこには全てインスタンスがあるという事です。
何かの値が取得できたという事はそこにインスタンスが存在するという事です。
何かのメソッドを呼び出せたという事はそこにインスタンスが存在するという事です。

たとえstaticクラスでさえstaticの値を保持するためのインスタンスが1つ生成されます。
たとえenumであれstructであれ中身はクラスであり値を生成すればインスタンスが生成されます。
    • good
    • 0

thisは列挙子のインスタンス(Fruits型)です。


printlnは引数のtoString()メソッドを呼び出すから
列挙子の名前が出カされます。
    • good
    • 0

System.out.println(this);


ここの事言ってる?

根本的に考え方が間違えてる。

thisを使うと列挙子が出力されるのではない。
この場合、たまたまthisが列挙子だったから、上記のような記述ができるだけ。

以上。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!